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

col*_*web 6 javascript google-maps google-maps-api-3

以下是我想要的结果

在此输入图像描述

我想知道的是:

我使用中心点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;
}
Run Code Online (Sandbox Code Playgroud)

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

Guf*_*ffa 27

对于如此短的距离,当精度不必精确到厘米时,您可以将地球表面视为平坦的.计算中心点纬度从度数到公里的转换,然后可以使用毕达哥拉定理得到实例:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

注意:如果您传递0/360经度,则不会考虑代码.如果是这种情况,您首先必须将经度标准化.

  • 哇,你简直是史诗级的。人类对你提供的光芒微笑。 (4认同)
  • @colourtheweb:"ky"和"kx"值分别是纬度和经度的每度数km.当你靠近极点时,`kx`值会变小,因为度数线更接近.小提琴中的城市之间的距离差不多是91公里,用作门槛的10个距离实际上是公里,而不是米.您可以看到距离和使用阈值90和91 km:http://jsfiddle.net/Guffa/57gQa/1/ (3认同)
  • 真的很感激伙计。它正在工作并显示出我正在寻找的结果。你救了我的命!!老实说,我数学不好,所以我正在寻找另一个帮助,即如果你能帮助我理解 **var ky, kx** 中的值,或者如果你能 **评论 ,那就太好了代码**。在 JSfiddle 示例中,您将 10 视为公里,但它真的相当于 **公里** 或 **米** 吗? (2认同)