2010-05-06 29 views
2

我有一个Google地图应用程序,它在加载标记时绘制标记。新的要求之一是添加包含用户选择标记的多边形覆盖图。我能够使用几何控制来实现这一点,现在,下一步是形成一组选定的标记,为此我需要确定标记的纬度是否落在纬度范围内多边形?有没有办法确定多边形的经度并计算标记的经度是否在其边界之内?确定多边形内标记的纬度

回答

1

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

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

这在v3中被更新。你可以通过google.maps.geometry.poly命名空间做这个计算API Documentation

相关问题