2015-07-25 2 views
0

Я не могу использовать результат scipypdist. Меня интересует реальное географическое расстояние (предпочтительная единица: км). Возьмите следующие координаты:Измерение географического расстояния с помощью scipy

from scipy.spatial.distance import pdist 

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

Но что это за единица? Google говорит, что расстояние между этими двумя точками составляет 1179 км. Как мне добраться от 13.75021037?

+2

'pdist', AFAICT, не имеет возможности читать координаты, как широта длиной. Он принимает их как векторы в (AFAICT) R^n. Я считаю, что вы хотите искать [сферическое расстояние] (http://www.johndcook.com/blog/Fpython_longitude_latitude) или [большое расстояние круга] (http://stackoverflow.com/questions/22562739/how-to-compare -Великолепная-круг-расстояние-с-евклидова расстояния-в-двумерной сфере точки? RQ = 1). – cphlewis

+1

Лучшим инструментом для вас является география. См. Https://pypi.python.org/pypi/geopy на примере его использования для расчета геодезического расстояния между двумя точками, указанными с lat и long. –

+0

@cphlewis: Спасибо за предложение. Одно замечание: Ваша первая ссылка, похоже, сломана. – MERose

ответ

0

Метод pdist от scipy не поддерживает расстояние для lon, lat координаты, как указано в комментариях.

Однако, если вы хотите получить матрицу расстояний, возвращаемую pdist, то вы можете использовать метод pdist и методы расстояния, указанные в пакете geopy. Для этого pdist позволяет рассчитать расстояния с помощью настраиваемой функции с двумя аргументами (лямбда-функцией).

Вот пример:

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) 
Смежные вопросы