大家好o / 我知道这比gmap更像是一个数学问题,但我想有人已经通过了这个=)
在我的地图中,我有圈子(实际上我有几个,但这不会改变问题),如下所示:http://code.google.com/intl/pt-BR/apis/maps/articles/mvcfun/step6.html
我如何知道标记(纬度X和经度Y)是否在此圆圈内?
抱歉英语不好,我是brazillian = p
答案 0 :(得分:8)
在Google Maps JavaScript API v3中,您可以使用几何库。要启用它,您必须稍微更改脚本URL:
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=geometry"></script>
该库包含用于计算球体上几何数据的实用函数。您可以利用它来计算由latLngs给出的两个点的距离:
var distanceInMetres = google.maps.geometry.spherical.computeDistanceBetween(latLngCircleCenter, latLngPoint);
现在您可以轻松检查点是否在圆圈内(假设R以米为单位):
if(distanceInMetres < R)
alert("in the circle");
答案 1 :(得分:2)
如果(lat1,lon1)和(lat2,lon2)是你的两个点,R是你的第一个点周围的圆的半径,那么点之间的距离由haversine formula(或者Great-circle distance)。但我相信,对于你的问题,角度足够小,可以使用这种近似值:
然后检查d ^ 2是否小于半径R ^ 2.
但是如果您的纬度和经度差异大于几度,您将需要使用完整的半正弦公式。
答案 2 :(得分:1)
我建议你阅读http://www.movable-type.co.uk/scripts/latlong.html。它为这种计算提供了许多算法。它包含用于计算的JavaScript代码。
答案 3 :(得分:0)
基本上,如果您有圆心(cX,cY)和半径R的坐标,以及X,Y处的某些标记,您可以进行以下计算:
var distanceQuad = (X-cX)*(X-cX)+(Y-cY)*(Y-cY)
if (distanceQuad<=(R*R))
{
alert("Marker inside circle!");
}
这是来自三角学。您将距离计算为sqrt(sqr(deltaX)+ sqr(deltaY))并将其与圆半径进行比较。鉴于代码有点优化以摆脱计算平方根。
答案 4 :(得分:0)
这比你期望的要容易得多。阅读this answer,包括一个有效的jsFiddle示例。