在Google地图中的点周围绘制半径


93

我正在使用Google Maps API,并添加了标记。现在,我想在每个标记周围添加10英里半径,这意味着一个在缩放时行为适当的圆。我不知道该怎么做,这似乎并不常见。

我找到了一个看起来不错的示例,您也可以查看Google Latitude。就像我想要的那样,他们在那里使用半径标记。

更新:谷歌纵横使用缩放后的图像,它将如何工作? (功能已弃用)


如果有用,可以在此处查看示例,并附有可拖动的半径。
凸轮杰克逊

Answers:


235

使用Google Maps API V3,创建一个Circle对象,然后使用bindTo()将其绑定到标记的位置(因为它们都是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 Latitude圆。

查看更多源代码和示例屏幕截图


2
也有这样的“玩转MVC对象”文章中的谷歌地图API的一个很好的例子web.archive.org/web/20120312044803/http://code.google.com/apis/...
约翰·


9

在球形几何形状中,形状由点,线和这些线之间的角度定义。您只有那些基本的价值可以使用。

因此,圆(就投影到球体上的aa形状而言)是必须使用点近似的东西。点越多,看起来越像一个圆圈。

话虽如此,但要意识到Google地图将地球投影到平坦的表面上(想想“展开”地球并拉伸+展平直到看起来“方形”)。如果您有一个平面坐标系,则可以在其上绘制2D对象。

换句话说,您可以在Google地图上绘制比例缩放的矢量圆圈。问题是,谷歌地图并没有给您开箱即用的功能(他们希望尽可能地接近GIS值)。他们只给您GPolygon,您希望它们用来近似一个圆。但是,这个家伙是使用IE的vml和其他浏览器的svg来做到这一点的(请参见“ SCALD CIRCLES”部分)。

现在,使用缩放的圆圈图像回到有关Google谷歌纵横的问题(这可能对您最有用):如果您知道圆圈的半径永远不会改变(例如,某点周围总是10英里),那么最简单的解决方案是使用GGroundOverlay,它只是图像网址+图像表示的GLatLngBounds。然后,您需要做的唯一工作是计算代表10英里半径的GLatLngBounds。有了该功能后,随着用户放大和缩小,Google Maps api即可缩放图像。


6
好答案。对于那些需要像我一样查找的人,IOW的意思是换句话说,OOTB的意思是开箱即用。
Anthony Hiscox 2012年

4

过去我曾遇到过这个问题,所以我将讨论加为书签

总结一下,您可以:

  1. 查看此圆形过滤器的源代码,并弄清楚如何将其合并到您的项目中。
  2. 用足够的点绘制一个GPolygon以模拟一个圆。
  3. 通过修改http://www.nearby.org.uk/google/circle.kml.php?radius=30miles&lat=40.173&long=-105.1024并导入它来生成KML文件。在Google Maps中,您只需将URI粘贴在搜索框中,它将显示在地图上。我不确定您如何使用API​​来实现。

2

我刚刚写了一篇博客文章来解决这个问题,您可能会发现它很有用: http //seewah.blogspot.com/2009/10/circle-overlay-on-google-map.html

基本上,您需要使用正确的GLatLngBounds创建一个GGroundOverlay。棘手的一点是,根据所需的半径,计算出以该圆为边界的该想象中的正方形(GLatLngBounds)的西南角坐标和东北角坐标。数学非常复杂,但是您只能在博客中引用getDestLatLng函数。其余的应该很简单。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.