【发布时间】:2015-03-11 18:12:51
【问题描述】:
我在我的 java 项目中使用 Google Maps API v3。我需要找到两点之间的欧几里得距离。但是当我使用普通公式计算欧几里得距离时,结果有点错误:
例如:
假设我有两点 纽约 (43.2994285, -74.2179326) 和 斯德哥尔摩 (59.3293235, 18.0685808) 我想要 计算这两点的欧几里得距离:
双倍距离 = Math.sqrt(Math.pow(43.2994285 - 59.3293235, 2) + Math.pow(-74.2179326 - 18.0685808, 2)); 距离 = 93.66834091217483
结果明显错误。
然后我意识到起始坐标不是笛卡尔坐标系中的(0,0)。实际上 开始是 51° 28' 38" N,0° 00' 00" W (WGS 84)。参考点是格林威治 (51.4825766, -0.0076589)。
所以计算新坐标的过程是这样的:
纽约 (|51.4825766 - 43.2994285|, |-0.0076589- (-74.2179326)|) = 纽约 (8.1831481, 74.2102737)
斯德哥尔摩 (|51.4825766 - 59.3293235|, |-0.0076589 - 18.0685808|) = 斯德哥尔摩 (7.8467469, 18.0762397)
然后应用欧几里得距离的公式。我的问题是这是一种正确的方法,还有其他方法吗?
【问题讨论】:
-
为什么你认为答案是错误的?您是以度为单位计算的。
-
但是根据本站的实际距离:freemaptools.com/how-far-is-it-between.htm从纽约到斯德哥尔摩是6326.564公里。
-
欧式距离只适用于平面
-
所以当我用谷歌地图坐标给你两个点时,你找不到欧几里得距离?
-
你可以,但不能通过那个公式。一方面,经度的长度不同于纬度的长度。
标签: java google-maps gis latitude-longitude coordinate-transformation