Respostas:
A API do Google Maps ainda não fornece um método para verificar pontos nos polígonos. Depois de pesquisar um pouco, deparei-me com o algoritmo de projeção de raios, que determinará se uma coordenada XY está dentro de uma forma plotada. Isso se traduzirá em latitude e longitude. A seguir, estende o google.maps.polygon.prototype para usar esse algoritmo. Basta incluir esse código em um ponto no código após o carregamento do google.maps:
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);
}
};
Aqui, estendemos a funcionalidade do google.maps.Polygon definindo uma função com o nome 'Contém' que pode ser usada para determinar se a longitude de latitude fornecida no parâmetro de função está dentro do polígono ou não. Aqui, usamos o algoritmo de fundição por raio e desenvolvemos uma função usando o mesmo. Depois de fazer tanto exercício agora, podemos verificar um ponto da seguinte maneira:
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 obter o código completo e a demonstração, acesse: http://counsellingbyabhi.blogspot.in/2013/01/google-map-check-whether-point-latlong.html
Eu iria no plugin Open Layers; buscá-lo e, em seguida, você pode adicionar qualquer camada dinâmica ao seu mapa e exportar.
* Antes de fazer isso, verifique se o CRS do projeto (EPSG) está definido como WGS84 e se a transformação do CRS 'on the fly' está ativada nas configurações de Propriedades do projeto.
Espero que isto ajude.
se você usar um programa de terceiros como geodjango, poderá verificar seu ponto dentro de um conjunto de polígonos ou não. mais informações estão aqui .
contains
Availability: PostGIS, Oracle, MySQL, SpatiaLite
Tests if the geometry field spatially contains the lookup geometry.
Example:
Zipcode.objects.filter(poly__contains=geom)
Backend SQL Equivalent
PostGIS ST_Contains(poly, geom)
Oracle SDO_CONTAINS(poly, geom)
MySQL MBRContains(poly, geom)
SpatiaLite Contains(poly, geom)
espero que ajude você ...
Eu sei que isso é um pouco tarde, mas pode ser útil no caso de SomeOne não experimentar a biblioteca Android-Map-Utils. Publiquei os métodos específicos desta pergunta apenas para Android. Aqui está: