Eu sei como fazer o acima usando Esri (tarefa de consulta no shapefile), mas isso também pode ser feito usando o Google Maps? Preciso consultar cada polígono ou existe um método para consultar um conjunto de polígonos?
fonte
Eu sei como fazer o acima usando Esri (tarefa de consulta no shapefile), mas isso também pode ser feito usando o Google Maps? Preciso consultar cada polígono ou existe um método para consultar um conjunto de polígonos?
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.
fonte
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 .
espero que ajude você ...
fonte
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á:
fonte