2

我正在编写一个大量使用 geodjango(在 PostGis 上)和空间查找的应用程序。数据库端的距离查询效果很好,但现在我必须计算应用程序 python 端两点之间的距离(这些点来自使用单独查询获得的模型)。

我可以想出很多方法来计算这个距离,但我想知道以与数据库输出一致的方式来做。

是否有任何神奇的 python 函数可以计算两个点之间的距离,它们是在哪个 SRID 中测量的?如果不是,您还能提出什么其他方法。

4

3 回答 3

3

您可以使用这个问题的 hasrsine 函数

>>> from math import radians, cos, sin, asin, sqrt
>>> 
>>> def haversine(lon1, lat1, lon2, lat2):
...     """
...     Calculate the great circle distance between two points 
...     on the earth (specified in decimal degrees)
...     """
...     # 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)) 
...     km = 6367 * c
...     return km 
... 
>>> haversine(-1.7297, 53.3205, -1.6997, 53.3186)
2.0025842109026413
于 2012-07-28T19:54:23.957 回答
1

如果您想要与 PostGIS 的方式保持一致,您可能想要使用比 hasrsine 实现更好的东西。我建议您查看GeographicLib的 Python 版本,它可以更准确地进行计算。

你会在gis.stackexchange上得到更好的答案

于 2015-06-05T17:15:06.517 回答
0

使用适当的数据连接来执行您已经在使用的 SQL 函数,然后检索它... 保持一切一致。

于 2012-07-28T19:25:57.857 回答