我正在使用Google Maps API,并添加了标记。现在,我想在每个标记周围添加10英里半径,这意味着一个在缩放时行为适当的圆。我不知道该怎么做,这似乎并不常见。
我找到了一个看起来不错的示例,您也可以查看Google Latitude。就像我想要的那样,他们在那里使用半径标记。
更新:谷歌纵横使用缩放后的图像,它将如何工作? (功能已弃用)
我正在使用Google Maps API,并添加了标记。现在,我想在每个标记周围添加10英里半径,这意味着一个在缩放时行为适当的圆。我不知道该怎么做,这似乎并不常见。
我找到了一个看起来不错的示例,您也可以查看Google Latitude。就像我想要的那样,他们在那里使用半径标记。
更新:谷歌纵横使用缩放后的图像,它将如何工作? (功能已弃用)
Answers:
使用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圆。
查看更多源代码和示例屏幕截图。
在球形几何形状中,形状由点,线和这些线之间的角度定义。您只有那些基本的价值可以使用。
因此,圆(就投影到球体上的aa形状而言)是必须使用点近似的东西。点越多,看起来越像一个圆圈。
话虽如此,但要意识到Google地图将地球投影到平坦的表面上(想想“展开”地球并拉伸+展平直到看起来“方形”)。如果您有一个平面坐标系,则可以在其上绘制2D对象。
换句话说,您可以在Google地图上绘制比例缩放的矢量圆圈。问题是,谷歌地图并没有给您开箱即用的功能(他们希望尽可能地接近GIS值)。他们只给您GPolygon,您希望它们用来近似一个圆。但是,这个家伙是使用IE的vml和其他浏览器的svg来做到这一点的(请参见“ SCALD CIRCLES”部分)。
现在,使用缩放的圆圈图像回到有关Google谷歌纵横的问题(这可能对您最有用):如果您知道圆圈的半径永远不会改变(例如,某点周围总是10英里),那么最简单的解决方案是使用GGroundOverlay,它只是图像网址+图像表示的GLatLngBounds。然后,您需要做的唯一工作是计算代表10英里半径的GLatLngBounds。有了该功能后,随着用户放大和缩小,Google Maps 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
它围绕点创建圆,然后以不同的颜色显示范围内和范围外的标记。它们还会计算动态半径,但是在您的情况下,半径是固定的,因此可能会减少工作量。