用Scipy测量地理距离

31moq8wy  于 2022-12-18  发布在  其他
关注(0)|答案(2)|浏览(161)

我没有使用scipypdist函数的结果,我感兴趣的是真实的的地理距离(首选单位:km)。取以下坐标:

from scipy.spatial.distance import pdist

coordinates = [ (42.057, -71.08), (39.132, -84.5155) ]
distance = pdist(coordinates)
print distance
# [ 13.75021037]

但是单位是什么呢,谷歌说这两点之间的距离是1179公里,从13.75021037怎么去呢?

ffx8fchx

ffx8fchx1#

scipy中的pdist方法不支持lonlat坐标的距离,如注解中所述。
然而,如果你想得到pdist返回的距离矩阵,你可以使用pdist方法和geopy包中提供的distance方法,pdist允许用一个带有两个参数的自定义函数(lambda函数)来计算距离。
下面是一个例子:

from scipy.spatial.distance import pdist
from geopy.distance import vincenty
import numpy as np

coordinates = np.array([[19.41133431, -99.17822823],
                        [19.434514  , -99.180934],
                        [19.380412  , -99.178789])

# Using the vincenty distance function.

m_dist = pdist(coordinates, # Coordinates matrix or tuples list
               # Vicenty distance in lambda function
               lambda u, v: vincenty(u, v).kilometers)
o4hqfura

o4hqfura2#

使用最新的Python 3,现在给出了一个弃用警告,实际上我发现this answer by @cffk更容易理解:
(为方便粘贴此处)

>>> from geopy.distance import geodesic, great_circle
>>> p1 = (31.8300167,35.0662833) # (lat, lon) - https://goo.gl/maps/TQwDd
>>> p2 = (31.8300000,35.0708167) # (lat, lon) - https://goo.gl/maps/lHrrg
>>> geodesic(p1, p2).meters
429.1676644986777
>>> great_circle(p1, p2).meters
428.28877358686776

相关问题