为什么使用半正弦公式进行地理定位的曼哈顿距离不准确?[Python]

pie*_*tro 5 python distance geolocation coordinates haversine

我想在 LAT、LNG 的坐标对中计算“曼哈顿距离”,也称为“城市街区距离”。

在这篇文章曼哈顿距离的两个地理位置之后,我使用haversine公式计算了距离:

source = (45.070060, 7.663708)
target = (45.068250, 7.663492)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

这是我的计算:

    from math import radians, sin, asin, sqrt, atan2

    # convert decimal degrees to radians
    lat1, lon1, lat2, lon2 = map(radians, [source[0], source[1], target[0], target[1]])

    #haversine formula for delta_lat
    dlat = lat2 - lat1
    a = sin(dlat / 2) ** 2
    c = 2 * atan2(sqrt(a), sqrt(1-a)))
    r = 6371
    lat_d = c * r

    # haversine formula for delta_lon
    dlon = lon2 - lon1
    a = sin(dlon / 2) ** 2
    c = 2 * atan2(sqrt(a), sqrt(1-a))
    r = 6371
    lon_d = c * r


    print lat_d + lon_d
Run Code Online (Sandbox Code Playgroud)

问题是我的结果是 225m,而谷歌地图说是 270m。

再次尝试计算之间的距离

source = (45.070060, 7.663708)
target = (45.072800, 7.665540)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我得到的结果是 508m,而谷歌地图说是 350m。

如果有人能帮助我理解这里有什么问题以及如何改进这个远不能被接受的解决方案,我将不胜感激。谢谢!

pie*_*tro 3

我自己可能明白了这一点,答案是,如果您查看这些图片,这些图片与上面原始问题中发布的图片相同,您可以理解我实现的半正弦方法,将距离计算为中的红线图像。因此,在第一种情况下,我获得 225m 而不是 270m(较低,因为红线是三角形的斜边),而在第二种情况下,我获得 508m,而不是 350(较高,因为三角形的边总和)。因此,解决这个问题的方法应该是逆时针旋转城市地图,将蓝色虚线与笛卡尔参考的 Y 轴对齐。

任何建议将不胜感激。谢谢 在此输入图像描述在此输入图像描述