Showing posts with label google maps. Show all posts
Showing posts with label google maps. Show all posts

Saturday, June 05, 2010

Um ponto está dentro de um polígono? Google Maps API + JQuery + Rails

Tive alguns problemas para saber se um ponto estava em um polígono nesses últimos 2 dias, agora matei o bixo!

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!