我是GeoDjango的新手,我正在尝试计算物体之间的距离。
我正按照此帖https://coderwall.com/p/k1gg1a/distance-calculation-in-geodjango执行所有操作,但我的结果与Google地图告诉我的结果不同。
当我尝试计算伦敦和巴黎之间的距离时,我得到了这个
london = GEOSGeometry('POINT(-0.056922 51.480415)', srid=4326)
paris = GEOSGeometry('POINT(2.350918 48.867744)', srid=4326)
london = london.transform(900913, clone=True)
paris = paris.transform(900913, clone=True)
print(london.distance(paris))
>>> 527450.6633622452
看起来大概是527公里。
我做错了什么?
答案 0 :(得分:0)
你没有做错任何事。谷歌地图是(我认为)返回大圆距离而GEOS(这是 Geometry 引擎 - 开源的首字母缩写)正在返回欧几里德距离(GEOS更多关于几何和拓扑比地理)。如果你想近似大圆距离,你可以尝试使用以下代码的Haversine公式:this问题:
>>>from math import radians, cos, sin, asin, sqrt
...
>>>def haversine(lon1, lat1, lon2, lat2):
... # convert decimal degrees to radians
... lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
... # haversine formula
... dlon = lon2 - lon1
... dlat = lat2 - lat1
... a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
... c = 2 * asin(sqrt(a))
... r = 6371 # Radius of earth in kilometers. Use 3956 for miles
... return c * r
>>>haversine(-0.056922, 51.480415, 2.350918, 48.867744)
>>>337.303...