2013-10-03 126 views
1

我目前正在使用Google Maps API v3.13。尽管我的编码已经停止了,但文档并没有真正帮助我。Google Maps API v3:绘制几何图形

我所做的是我已经实现了DrawingLibrary,并且我可以在地图上绘制形状。当我完成绘制任务时,我想要做的是获取绘制的形状的边框/角(我只激活了折线和矩形)。

然后我想用这个区域来查看它里面是否有标记,然后让它们“有弹性”或类似的东西。所以我的问题是,我如何得到用户画的区域?这种数据的格式是什么?每个角落的坐标?我是否必须将DrawingLibrary的功能与GeometryLibrary结合起来才能做到这一点?

我已经检查了这些单证,但仍然没有能够找到一个解决方案。 https://developers.google.com/maps/documentation/javascript/geometry https://developers.google.com/maps/documentation/javascript/drawing

这是我到目前为止有:

function bindOverlayFinishedEvents() { 
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event) { 
    if (event.type == google.maps.drawing.OverlayType.POLYGON) { 
     //bounds = event.overlay.getBounds(); 
    } 
    else if (event.type == google.maps.drawing.OverlayType.RECTANGLE) { 
     //bounds = event.overlay.getBounds(); 
    } 
}); 

}

任何帮助将不胜感激!

+1

你跟你贴的代码有什么问题? – geocodezip

+1

[google.maps.Polygon](https://developers.google.com/maps/documentation/javascript/reference#Polygon)没有.getBounds方法,但可以从其路径计算其边界。 [google.maps.Rectangle](https://developers.google.com/maps/documentation/javascript/reference#Rectangle)确实有一个getBounds方法,因此_should_可以工作。 – geocodezip

+0

[使用绘图库的示例](http://www.geocodezip.com/blitz-gmap-editor/test5.html)如果从编码中导入多边形,它会计算其边界并使用它来居中放大地图。 – geocodezip

回答

2

因为你的目标是,以确定标志是否位于一个区域内,下面的例子演示它取决于形状类型如何做到:

  • 的圈子:circle.getBounds().contains(latLng) && google.maps.geometry.spherical.computeDistanceBetween(circle.getCenter(), latLng) <= circle.getRadius()
  • 为矩形:rectangle.getBounds().contains(latLng)
  • 多边形:google.maps.geometry.poly.containsLocation(latLng,polygon)

包装函数来确定点是否位于插件IDE的形状:

//wrapper for contains function 
var shapeContains = function (shape, latLng) { 
    if (shape instanceof google.maps.Circle) 
     return shape.getBounds().contains(latLng) && google.maps.geometry.spherical.computeDistanceBetween(shape.getCenter(), latLng) <= shape.getRadius(); 
    else if (shape instanceof google.maps.Rectangle) 
     return shape.getBounds().contains(latLng); 
    else if(shape instanceof google.maps.Polygon) 
     return google.maps.geometry.poly.containsLocation(latLng, shape); 
    else 
     throw new Error("contains is not supported for this type of shape"); 
} 

Codepen (demo)