在Google地图上围绕一个点绘制半径
我正在使用Google Maps API并添加了标记。 现在我想在每个标记周围添加10英里的半径,这意味着在缩放时适当运行的圆圈。 我不知道该怎么做,看起来并不常见。
我发现一个看起来不错的例子,你也可以看看Google Latitude。 在那里,他们使用半径标记,就像我想要的那样。
更新:谷歌纵横使用缩放的图像 ,这将如何工作?
使用Google Maps API V3创build一个Circle对象,然后使用bindTo()将其绑定到Marker的位置(因为它们都是google.maps.MVCObject实例)。
// Create marker var marker = new google.maps.Marker({ map: map, position: new google.maps.LatLng(53, -2.5), title: 'Some location' }); // Add circle overlay and bind to marker var circle = new google.maps.Circle({ map: map, radius: 16093, // 10 miles in metres fillColor: '#AA0000' }); circle.bindTo('center', marker, 'position');
您可以通过更改fillColor,strokeColor,strokeWeight等( 完整的API )使它看起来就像Google谷歌纵横圈一样。
查看更多源代码和示例截图 。
看来,实现这一点最常用的方法是绘制一个有足够点的GPolygon来模拟一个圆。 您引用的示例使用此方法。 这个页面有一个很好的例子 – 在源代码中查找drawCircle函数。
在球形几何形状中由这些线之间的点,线和angular度定义。 你只有这些基本的价值观才能工作。
因此,一个圆(根据投影到球体上的形状)是必须用点来近似的东西。 越多的点,它会看起来像一个圆圈。
话虽如此,认识到谷歌地图是投影在一个平坦的表面 (认为“展开”地球和拉伸+展平,直到它看起来“正方形”)。 如果你有一个平面坐标系统,你可以在上面绘制2D对象。
换句话说,你可以在谷歌地图上绘制缩放的vector圆。 赶上是,谷歌地图不会给你开箱(他们希望保持尽可能接近地理信息系统的价值观)。 他们只给你他们希望你使用的GPolygon近似一个圆。 但是, 这个人使用vml的IE浏览器和其他浏览器的svg(请参阅“SCALED CIRCLES”部分)。
现在,使用缩放的圆形图像(这对您来说可能是最有用的)回到您关于谷歌纵横的问题:如果您知道圆的半径将永远不会改变(例如,它总是在某个点周围10英里),那么最简单的解决scheme是使用GGroundOverlay ,它只是图像url +图像所代表的GLatLngBounds。 你需要做的唯一的工作是缓解代表你10英里半径的GLatLngBounds 。 一旦你有,谷歌地图API处理缩放您的图像,当用户放大和缩小。
我以前有过这个问题,所以我把这个讨论加了书签。
总结一下,你可以:
- 看看这个圆圈filter的源代码,并找出如何将其纳入您的项目。
- 用足够的点绘制一个GPolygon来模拟一个圆。
- 通过修改http://www.nearby.org.uk/google/circle.kml.php?radius=30miles&lat=40.173&long=-105.1024生成KML文件,然后导入它。; 在Google地图中,您只需将URI粘贴到search框中,即可显示在地图上。 我不知道如何使用API来做到这一点。
这是谷歌的圈子,标记和事件的另一个(工作)的例子。 看这里
对于API v3解决scheme,请参阅:
http://blog.enbake.com/draw-circle-with-google-maps-api-v3
它围绕点创build圆,然后用不同的颜色显示范围内外的标记。 他们也计算dynamic半径,但在你的情况下,半径是固定的,所以可能是较less的工作。
我刚刚写了一篇博客文章,解决了这个问题,你可能会觉得有用: http : //seewah.blogspot.com/2009/10/circle-overlay-on-google-map.html
基本上,你需要用正确的GLatLngBounds创build一个GGroundOverlay。 棘手的问题在于根据所需的半径计算围绕该圆的这个想象方块(GLatLngBounds)的西南angular坐标和东北angular坐标。 math相当复杂,但是您可以在博客中引用getDestLatLng函数。 其余的应该是非常简单的。