Определите ширину маркеров внутри многоугольника - PullRequest
2 голосов
/ 07 мая 2010

У меня есть приложение Google Maps, которое отображает маркеры при загрузке. Одним из новых требований является добавление наложения полигонов, охватывающего выбор маркеров пользователем. Мне удалось добиться этого с помощью элементов управления геометрией Утилита GMaps Library

Теперь, следующий шаг - сформировать группу выбранных маркеров, для которых мне нужно было бы определить, попадают ли значения ширины маркеров в пределы значений многоугольника? Есть ли способ определить ширину многоугольника и вычислить, находится ли ширина маркера в пределах его границ?

Ответы [ 4 ]

1 голос
/ 07 мая 2010
// Create polygon method for collision detection
GPolygon.prototype.containsLatLng = function(latLng) {
    // Do simple calculation so we don't do more CPU-intensive calcs for obvious misses
    var bounds = this.getBounds();

    if(!bounds.containsLatLng(latLng)) {
        return false;
    }

    // Point in polygon algorithm found at http://msdn.microsoft.com/en-us/library/cc451895.aspx
    var numPoints = this.getVertexCount();
    var inPoly = false;
    var i;
    var j = numPoints-1;

    for(var i=0; i < numPoints; i++) { 
        var vertex1 = this.getVertex(i);
        var vertex2 = this.getVertex(j);

        if (vertex1.lng() < latLng.lng() && vertex2.lng() >= latLng.lng() || vertex2.lng() < latLng.lng() && vertex1.lng() >= latLng.lng())  {
            if (vertex1.lat() + (latLng.lng() - vertex1.lng()) / (vertex2.lng() - vertex1.lng()) * (vertex2.lat() - vertex1.lat()) < latLng.lat()) {
                inPoly = !inPoly;
            }
        }

        j = i;
    }

    return inPoly;
};
1 голос
/ 07 мая 2010

Я никогда напрямую не связывался с Google Maps, но вы можете сохранить точки, которые составляют многоугольник, а затем использовать Алгоритм точки-полигона , чтобы проверить, является ли данная точка долготы и широты в пределах многоугольника или нет.

0 голосов
/ 14 января 2013

Это было обновлено в v3. Вы можете сделать это вычисление через пространство имен google.maps.geometry.poly Документация API

0 голосов
/ 07 мая 2010

Следуя предложению npinti , вы можете проверить следующую реализацию "точка-полигон" для Карт Google:

...