我正在使用 Google Maps API 并添加了标记。现在我想在每个标记周围添加一个 10 英里的半径,这意味着一个在缩放时表现适当的圆圈。我不知道该怎么做,而且这似乎并不常见。
我找到了一个看起来不错的例子,你也可以看看谷歌纵横。他们在那里使用带有半径的标记,就像我想要的那样。
更新:谷歌纵横使用缩放的图像,它是如何工作的? (功能已弃用)
我正在使用 Google Maps API 并添加了标记。现在我想在每个标记周围添加一个 10 英里的半径,这意味着一个在缩放时表现适当的圆圈。我不知道该怎么做,而且这似乎并不常见。
我找到了一个看起来不错的例子,你也可以看看谷歌纵横。他们在那里使用带有半径的标记,就像我想要的那样。
更新:谷歌纵横使用缩放的图像,它是如何工作的? (功能已弃用)
使用 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 圆圈。
查看更多源代码和示例截图。
在球面几何形状中,形状由点、线和这些线之间的角度定义。你只有那些基本的价值观可以使用。
因此,圆(根据投影到球体上的形状)是必须使用点近似的东西。点越多,它看起来就越像一个圆圈。
话虽如此,请意识到谷歌地图正在将地球投影到平坦的表面上(想想“展开”地球并拉伸+展平直到它看起来“方形”)。如果你有一个平面坐标系,你可以随心所欲地在上面绘制 2D 对象。
换句话说,您可以在谷歌地图上绘制一个缩放的矢量圆圈。问题是,谷歌地图并没有开箱即用(他们希望尽可能接近 GIS 值)。他们只给你GPolygon,他们希望你用它来近似一个圆。然而,这个人在IE 上使用 vml,在其他浏览器上使用 svg(参见“SCALED CIRCLES”部分)。
现在,回到你关于使用缩放圆形图像的谷歌纬度的问题(这可能对你最有用):如果你知道你的圆的半径永远不会改变(例如它总是围绕某个点 10 英里),那么最简单的解决方案是使用GGroundOverlay,它只是一个图像 url + 图像代表的 GLatLngBounds 。您需要做的唯一工作是计算代表您的 10 英里半径的GLatLngBounds 。一旦你有了它,谷歌地图 api 会在用户放大和缩小时处理缩放你的图像。
我过去遇到过这个问题,所以我把这个讨论加入了书签。
总结一下,你可以:
我刚刚写了一篇博客文章来解决这个问题,您可能会发现它很有用: http ://seewah.blogspot.com/2009/10/circle-overlay-on-google-map.html
基本上,您需要使用正确的 GLatLngBounds 创建一个 GGroundOverlay。棘手的一点是根据所需的半径计算这个想象正方形(GLatLngBounds)包围这个圆的西南角坐标和东北角坐标。数学相当复杂,但您可以参考博客中的 getDestLatLng 函数。其余的应该很简单。
有关 API v3 解决方案,请参阅:
http://blog.enbake.com/draw-circle-with-google-maps-api-v3
它围绕点创建圆圈,然后用不同的颜色显示范围内和范围外的标记。他们还计算动态半径,但在您的情况下,半径是固定的,因此工作量可能会减少。