确定多边形内标记的lat lng

时间:2010-05-06 21:56:56

标签: google-maps

我有一个谷歌地图应用程序,它会在加载时绘制标记。新要求之一是添加包含用户选择标记的多边形覆盖。我能够使用GMaps Utility Library

的几何控件实现这一目标

现在,下一步是形成一组选定的标记,我需要确定标记的lat lng是否落在多边形的lat lngs内?有没有办法确定多边形的lat lng并计算标记的lat lng是否在其边界内?

4 个答案:

答案 0 :(得分:1)

我从未直接使用Google地图,但您可以存储构成多边形的点,然后使用the Point-In-polygon Algorithm检查给定的经度和纬度点是否在多边形内。

答案 1 :(得分:1)

// 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;
};

答案 2 :(得分:0)

关注npinti's suggestion,您可能需要查看以下Google地图的多边形点实现:

答案 3 :(得分:0)

这已在第3版中更新。您可以通过google.maps.geometry.poly命名空间API Documentation

进行此计算