Javascript 如何检查给定标记是否在区域内
大家好,o/ 我知道这更像是一道数学题而不是gmap,但我想有人已经通过了这道题=) 在我的地图中,我有一个圆圈(实际上我有几个圆圈,但这并没有改变问题),如下所示: 我如何知道一个标记(带有纬度X和经度Y)是否在这个圆圈内 对不起,我的英语不好,我是巴西人,如果(lat1,lon1)和(lat2,lon2)是你的两点,R是围绕第一点的圆的半径,那么点之间的距离由(或)给出。但我相信对于你的问题,角度足够小,可以使用这个近似: 然后检查d^2是否小于半径R^2Javascript 如何检查给定标记是否在区域内,javascript,math,google-maps,google-maps-api-3,Javascript,Math,Google Maps,Google Maps Api 3,大家好,o/ 我知道这更像是一道数学题而不是gmap,但我想有人已经通过了这道题=) 在我的地图中,我有一个圆圈(实际上我有几个圆圈,但这并没有改变问题),如下所示: 我如何知道一个标记(带有纬度X和经度Y)是否在这个圆圈内 对不起,我的英语不好,我是巴西人,如果(lat1,lon1)和(lat2,lon2)是你的两点,R是围绕第一点的圆的半径,那么点之间的距离由(或)给出。但我相信对于你的问题,角度足够小,可以使用这个近似: 然后检查d^2是否小于半径R^2 但是,如果纬度和经度差大于几度,
但是,如果纬度和经度差大于几度,则需要使用完整的哈弗公式。基本上,如果有圆心坐标(cX,cY)和半径R,以及X,Y处的一些标记,则可以进行以下计算:
var distanceQuad = (X-cX)*(X-cX)+(Y-cY)*(Y-cY)
if (distanceQuad<=(R*R))
{
alert("Marker inside circle!");
}
var distance quad=(X-cX)*(X-cX)+(Y-cY)*(Y-cY)
if(distanceQuad我建议您阅读。它提供了许多用于此类计算的算法。它包括用于计算的JavaScript代码。在Google Maps JavaScript API v3中,您可以使用几何体库。要启用它,您必须稍微更改脚本URL:
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=geometry"></script>
现在,您可以轻松检查该点是否在圆内(假设R以米为单位):
if(距离米
这比你想象的要简单得多。请阅读一个正在运行的JSFIDLE示例。我尝试了var cX=37.79457586821203,cY=-122.37932682031499,R=50,X=37.791591528681565,Y=-121.81147098535405;var distance quad=(X-cX)*(X-cX)+(Y-cY)*(Y-cY)如果(DistanceQuad如果你关注线性距离,这将起作用。OP关注的是需要哈弗森公式的大圆弧长度。我尝试了if((Math.pow((x-xc),2)+Math.pow((y-yc),2))
但总是“圆内标记!”是的,绝对不要用它,它不是用来拉特隆的。事实上,我会从答案中删除它。
var distanceInMetres = google.maps.geometry.spherical.computeDistanceBetween(latLngCircleCenter, latLngPoint);
if(distanceInMetres < R)
alert("in the circle");