Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查给定标记是否在区域内_Javascript_Math_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 如何检查给定标记是否在区域内

Javascript 如何检查给定标记是否在区域内,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 但是,如果纬度和经度差大于几度,

大家好,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");