【发布时间】: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