Sé cómo hacer lo anterior con Esri (tarea de consulta en shapefile), pero ¿esto también se puede hacer con Google Maps? ¿Tengo que consultar cada polígono o hay un método para consultar un conjunto de polígonos?
fuente
Sé cómo hacer lo anterior con Esri (tarea de consulta en shapefile), pero ¿esto también se puede hacer con Google Maps? ¿Tengo que consultar cada polígono o hay un método para consultar un conjunto de polígonos?
La API de Google Maps aún no proporciona un método para verificar puntos en polígonos. Después de investigar un poco, me topé con el algoritmo de proyección de rayos que determinará si una coordenada XY está dentro de una forma trazada. Esto se traducirá en latitud y longitud. A continuación se extiende el google.maps.polygon.prototype para usar este algoritmo. Simplemente incluya este código en un punto del código después de que google.maps se haya cargado:
google.maps.Polygon.prototype.Contains = function (point) {
var crossings = 0,
path = this.getPath();
// for each edge
for (var i = 0; i < path.getLength(); i++) {
var a = path.getAt(i),
j = i + 1;
if (j >= path.getLength()) {
j = 0;
}
var b = path.getAt(j);
if (rayCrossesSegment(point, a, b)) {
crossings++;
}
}
// odd number of crossings?
return (crossings % 2 == 1);
function rayCrossesSegment(point, a, b) {
var px = point.lng(),
py = point.lat(),
ax = a.lng(),
ay = a.lat(),
bx = b.lng(),
by = b.lat();
if (ay > by) {
ax = b.lng();
ay = b.lat();
bx = a.lng();
by = a.lat();
}
// alter longitude to cater for 180 degree crossings
if (px < 0) {
px += 360;
}
if (ax < 0) {
ax += 360;
}
if (bx < 0) {
bx += 360;
}
if (py == ay || py == by) py += 0.00000001;
if ((py > by || py < ay) || (px > Math.max(ax, bx))) return false;
if (px < Math.min(ax, bx)) return true;
var red = (ax != bx) ? ((by - ay) / (bx - ax)) : Infinity;
var blue = (ax != px) ? ((py - ay) / (px - ax)) : Infinity;
return (blue >= red);
}
};
Aquí hemos ampliado la funcionalidad de google.maps.Polygon definiendo una función con el nombre 'Contiene' que se puede usar para determinar si la longitud de latitud proporcionada en el parámetro de la función está dentro del polígono o no. Aquí utilizamos el algoritmo de fundición de rayos y desarrollamos una función utilizando el mismo. Después de hacer todo este ejercicio ahora, podemos verificar un punto de la siguiente manera:
var point = new google.maps.LatLng(52.05249047600099, -0.6097412109375);
var polygon = new google.maps.Polygon({path:[INSERT_PATH_ARRAY_HERE]});
if (polygon.Contains(point)) {
// point is inside polygon
}
Para obtener el código completo y la demostración, visite: http://counsellingbyabhi.blogspot.in/2013/01/google-map-check-whether-point-latlong.html
Yo iría al plugin Open Layers; buscarlo, y luego incluso puede agregar cualquier capa dinámica a su mapa y exportar.
* Antes de hacerlo, asegúrese de tener su CRS de proyecto (EPSG) configurado en WGS84 y que la transformación CRS 'sobre la marcha' esté habilitada en la configuración de Propiedades del proyecto.
Espero que esto ayude.
fuente
Si utiliza un programa de terceros como geodjango, puede verificar su punto, ya sea dentro de un conjunto de polígonos o no. Más información está aquí .
Espero que te ayude...
fuente
Sé que esto es un poco tarde, pero podría ser útil en caso de que SomeOne no haya probado la biblioteca Android-Map-Utils. He publicado los métodos específicos de esta pregunta solo para Android. Aqui tienes:
fuente