使用Google地图坐标计算欧几里得距离

问题描述 投票:1回答:2

我在我的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)

然后应用欧氏距离的公式。我的问题是这是一种正确的方法,还有其他方法可以做到这一点吗?

java google-maps gis latitude-longitude coordinate-transformation
2个回答
2
投票

[您需要使用Haversine公式来计算两点之间的great-circle distance –即地球表面上的最短距离-参见此处的说明http://www.movable-type.co.uk/scripts/latlong.html

或者,如果需要使用欧几里德距离,请引自here。>

[如果两个点彼此靠近,例如在同一城市,用直线估计大圆经纬度空间将产生最小的误差,并且误差很大计算速度更快。较小的并发症是长度经度的程度取决于纬度:经度在赤道跨度为111公里,但在北纬60度时为一半。对此进行调整很容易:将经度乘以的余弦纬度。然后,您可以只求之间的欧几里德距离这两个点,并乘以一个度的长度:

distance(lat, lng, lat0, lng0):
    deglen := 110.25
    x := lat - lat0
    y := (lng - lng0)*cos(lat0)
    return deglen*sqrt(x*x + y*y)

并且为了进一步加快速度,您可以使用多项式逼近来逼近cos计算。


0
投票

由于二维曲面中-曲率-的概念,您的度量标准不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.