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

时间:2014-07-10 15:15:36

标签: javascript google-maps google-maps-api-3

以下是我想要的结果

enter image description here

我想知道的是:

我使用中心点lat lang和它周围的半径创建了圆。现在我想知道,如果你可以在Javascript中给我代码示例,如何检查(计算)纬度和经度是否在该区域内部或外部我将不胜感激。我正在使用Google Maps 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;
}

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

3 个答案:

答案 0 :(得分:18)

对于如此短的距离,并且当精度不必精确到厘米时,您可以将地球表面视为平坦的。计算中心点纬度从度数到千米的转换,然后Pythagoran theorem可用于获取实例:

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经度,则代码不会考虑。如果是这种情况,你首先必须规范经度。

答案 1 :(得分:1)

您需要的只是一点点spherical trig

首先,您需要距离(L = 10 km)所对应的arc的中心角θ。

L = theta*r

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

现在,如果感兴趣点和您的中心点之间的中心角是<1。 theta,它在你的圈子里面。将此角度称为theta_p。

这是一个说明球形三角形的图表: spherical triangle image 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,正如其他建议一样。

答案 2 :(得分:0)

使用毕达哥拉斯定理进行验证。从中心到要验证的点的距离可以计算为三角形的斜边。