【问题标题】:Check if a latitude and longitude is within a circle google maps检查纬度和经度是否在一个圆圈内谷歌地图
【发布时间】:2014-07-10 15:15:36
【问题描述】:

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

我想知道的是:

我使用中心点 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;
}

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

【问题讨论】:

  • 圆的半径不变。如果您的圆的半径为 10 公里,请检查该点是否在距离圆中心点 10 公里以内。如果是,则表示该点在圆内。

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


【解决方案1】:

对于如此短的距离,并且精度不必精确到厘米,您可以将地球表面视为平坦的。计算中心点纬度从度到公里的换算,然后Pythagorean 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 经度,代码不会考虑在内。如果是这种情况,您必须先对经度进行归一化。

【讨论】:

  • 非常感谢队友。它正在工作并显示我正在寻找的结果。你救了我的命!!老实说,我数学不好,所以我正在寻找另一个帮助,即如果你能帮助我理解 var ky, kx 中的值,或者如果你能注释代码。在 JSfiddle 示例中,您将 10 作为公里,但它真的是 km 还是 meters
  • @colourtheweb:kykx 值分别是纬度和经度的千米每度。当您靠近两极时,kx 值会变小,因为度数线更靠近。小提琴中的城市之间的距离几乎是91公里,作为门槛的10真的是公里,而不是米。 90公里和91公里可以看到距离和使用门槛:jsfiddle.net/Guffa/57gQa/1
  • 感谢您的时间和解释。真的很感激:-)
  • 问这个问题很晚,因为它已经 3 年了。我正在向某人解释它并想消除我的疑虑。你能告诉我我们在 kxdxdy 中究竟计算了什么。您还为 X 轴和 Y 轴命名了变量 kx、ky 和 ​​dx、dy 吗?在此先感谢您,期待您的答复。
  • 哇,你简直太棒了。人类对你提供的光芒微笑。
【解决方案2】:

你只需要一点spherical trig

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

L = theta*r

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

现在,如果兴趣点和您的中心点之间的中心角为

这是一个说明球面三角形的图表: 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 地球半径的小距离,就像其他建议一样。

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    相关资源
    最近更新 更多