【问题标题】:Google Maps Circle Overlay and Vincenty FormulaGoogle Maps Circle Overlay 和 Vincenty 公式
【发布时间】:2010-10-14 14:50:04
【问题描述】:

我使用 Circle 叠加层作为 Google Maps Javascript API V3 的一部分(即,见下文 - 我们有一个实际设置半径等的后续调用)以在我们的应用程序中显示 goe-spatial 位置。

   var circle = new google.maps.Circle({
      fillColor: lCircleColor,
      strokeWeight: 2
    });

我们还有一个后台服务器进程,它计算点到圆心的距离,以确定点是落在圆内还是在圆外 - 当点落在圆内时,我们会发出警报。我们最近遇到了一个特殊情况,其中一个点 (lat=31.197163, lon=-83.87292) 正好落在圆的边界上 (lat=31.1998, lon=-83.8738, radius=1000ft)。

当使用 Haversine 公式计算距离时,计算出的距离大于半径,而 Vincenty(更准确)距离小于半径,从而导致后端进程生成点落入的警报地点。

我的问题与 Google 地图如何显示圆形叠加层有关。当我们在我们的应用程序中查看它时,它似乎正好落在圆圈之外(只有在最大程度放大时才可见)。我在其他地方读到过,Google 的 API 使用 Vincenty 算法来计算距离,但为了显示它们的叠加层,它们是否假设为球形(因此也许可以解释为什么该点似乎落在圆外)?

【问题讨论】:

  • 请注意,这可能是由于您使用谷歌实现的各种算法不匹配;例如数据或单位系统不一致、舍入处理等。此外,Haversine 和 Vincenty 在小数点后 8 位(约 1.11 毫米)内完全无法区分,但地图 api 本身的精度仅为小数点后 6 位(约 111 毫米) ) 因此,在我看来,Vincenty 级别的精度对于在 Google 地图中显示没有意义。

标签: javascript google-maps geospatial computational-geometry


【解决方案1】:

在非常大的距离上使用 Google 地图距离计算器时,例如对于相距 9000 公里的两个点,结果比 Vincenty 公式给出的正确答案大约高出 2.4‰ (2.4/1000)。 谷歌到现在(2020 年 7 月)都无法实现 Vincenty 的公式有点奇怪。

【讨论】:

    【解决方案2】:

    在 Google Maps API V3 中,这些函数已在 google.maps.geometry 库的“球形”命名空间中提供。当您加载 Maps Javascript API 时,默认情况下不会加载此库,但必须通过使用库引导参数明确指定。

    http://code.google.com/apis/maps/documentation/javascript/geometry.html

    一旦加载了computeDistanceBetween()、computeHeading()、computeOffset()、interpolate()等函数,都可以使用。

    因此您不必自己实现任何算法,使用内部版本将解决您看到的差异。

    【讨论】:

      猜你喜欢
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      相关资源
      最近更新 更多