我使用 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 map 如何显示圆叠加层有关。当我们在我们的应用程序中查看它时,它似乎正好落在圆圈之外(只有在放大到最大程度时才可见)。我在别处读到,为了计算距离,Google 的 API 使用 Vincenty 算法,但为了显示它们的叠加层,它们是否假设为球形(因此也许可以解释为什么该点似乎落在圆圈之外)?
最佳答案
当在非常大的距离上使用 Google map 距离计算器时,例如对于彼此相距 9000 公里的两个点,结果大约比 Vincenty 公式给出的正确答案高出 2.4‰ (2.4/1000)。 谷歌直到现在(2020 年 7 月)都无法实现 Vincenty 的公式,这有点奇怪。
关于javascript - Google Maps Circle Overlay 和 Vincenty Formula,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3934460/