繁体   English   中英

检查纬度和经度是否在一个圆圈内谷歌地图

[英]Check if a latitude and longitude is within a circle google maps

以下是我正在寻找的理想结果

在此处输入图像描述

我想知道的是:

我使用中心点 lat lang 和围绕它的半径创建了圆。 现在我想知道,如何检查(计算)纬度和经度是否在区域内或区域外,如果您能给我 Javascript 中的代码示例,我将不胜感激。 我正在使用谷歌地图 API V3。

我找到了这个功能,但没有按预期工作:

function arePointsNear(checkPoint, centerPoint) {
    var sw = new google.maps.LatLng(centerPoint.lat() - 0.005, centerPoint.lng() - 0.005);
    var ne = new google.maps.LatLng(centerPoint.lat() + 0.005, centerPoint.lng() + 0.005);
    var bounds = new google.maps.LatLngBounds(sw, ne);
    if (bounds.contains (checkPoint)){
        return true;
    }
    return false;
}

任何帮助都会很棒..提前谢谢!

对于如此短的距离,并且当精度不必精确到厘米时,您可以将地球表面视为平坦的。 计算中心点纬度从度到公里的转换,然后可以用勾股定理得到距离:

function arePointsNear(checkPoint, centerPoint, km) {
  var ky = 40000 / 360;
  var kx = Math.cos(Math.PI * centerPoint.lat / 180.0) * ky;
  var dx = Math.abs(centerPoint.lng - checkPoint.lng) * kx;
  var dy = Math.abs(centerPoint.lat - checkPoint.lat) * ky;
  return Math.sqrt(dx * dx + dy * dy) <= km;
}

演示: http : //jsfiddle.net/Guffa/57gQa/

注意:如果您传递的是 0/360 经度,则代码不会考虑在内。 如果是这种情况,您必须首先对经度进行归一化。

你所需要的只是一个小球三角

首先,您需要距离(L = 10 公里)所对圆弧的中心角 theta。

L = theta*r

其中 r 是地球的半径(6378.135 公里)

现在,如果兴趣点和您的中心点之间的中心角 < theta,则它在您的圆内。 将此角度称为 theta_p。

这是一个说明球面三角形的图表: 球面三角形图像 http://en.wikipedia.org/wiki/File:Spherical_trigonometry_basic_triangle.svg

编辑 - 抱歉,显然我不知道如何链接到图像? 这是网址: http : //en.wikipedia.org/wiki/File : Spherical_trigonometry_basic_triangle.svg

在这种情况下,球面三角形的两条边(称为a, b )分别是点的经度差和纬度差。 夹角C为 90 度(经线与纬线之间的夹角。

余弦的球面三角定律是:

cos(c) = cos(a)*cos(b) + sin(a)*sin(b)*cos(C)

c是您的点之间的中心角,我们之前称之为 theta_p

编辑 - 这个解决方案不限于小距离 WRT 地球的半径,就像其他建议一样。

使用勾股定理来验证。 从中心到要验证的点的距离可以计算为三角形的斜边。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM