Lá vai:
function contem(poligono, point) {
var j=0;
var oddNodes = false;
var x = point.lng();
var y = point.lat();
for (var i=0; i < poligono.getVertexCount(); i++) {
j++;
if (j == poligono.getVertexCount()) {
j = 0;
}
if (((poligono.getVertex(i).lat() < y) &&
(poligono.getVertex(j).lat() >= y))
|| ((poligono.getVertex(j).lat() < y) &&
(poligono.getVertex(i).lat() >= y))) {
if ( poligono.getVertex(i).lng() + (y -
poligono.getVertex(i).lat()) / (poligono.getVertex(j).lat()-poligono.getVertex(i).lat())
* (poligono.getVertex(j).lng() - poligono.getVertex(i).lng())
oddNodes = !oddNodes
}
}
}
return oddNodes;
}
Um exemplo de utilização:
var nas_barcas_niteroi = new GLatLng(-22.9002528744688, -43.123140335083);
//Quadrado no Centro do Rio
var vertices =
[
new GLatLng(-22.8980627323264, -43.1954956054688),
new GLatLng(-22.9020160300563, -43.1989288330078),
new GLatLng(-22.9043879533846, -43.1954956054688),
new GLatLng(-22.9001184615258, -43.1884574890137),
]
var poligono = new GPolygon(vertices, "#000000", 1, 1, "#336699", 0.3);
var contem = contem(poligono, nas_barcas_niteroi);
alert("Contem? " + contem)
Bem legal trabalhar com a API do Google Maps + JQuery + Rails
Ferramenta certa, pra coisa certa!!!
Valeu!
Estrou precisando de uma rotina desta finalidade, mas não entendi o 3º "if" da function contem, se puder me ajudar, gostaria de mais explicações.
ReplyDeletePaulo
Conseguiu fazer este script funcionar Paulo?
DeleteAmigo seu código está com a sintaxe ERRADA! Está sobrando uma chave aí que tá fechando o que não abriu. Você pode por favor corrigir o código e disponibilizar o código direito pra que as pessoas vendo o tutorial não tenham que se foder pra resolver uma porra de um erro uma vez que já estão sofrendo pesquisando pra caralho tentando achar solução?
ReplyDeleteThis comment has been removed by the author.
DeleteAmigo estou precisando urgente deste tipo de Script, você tem como mostrar um DEMO desta sua aplicação?
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteMuito obrigado Thiago, estava a dias procurando está solução, você não tem noção do quanto me ajudou.Tive de fazer algumas alterações, pois estamos agora na v.3 da api do Google, quem tiver interesse nesta solução atualizada só avisar por aqui! Mais uma vez valew Thiago.
ReplyDelete