Ответ на ваш вопрос: Вы не можете делать то, что хотите делать с geopy
. Я не знаком с этим пакетом, но трассировка ошибок показывает, что эта функция и, возможно, все другие функции в этом пакете не были написаны / разработаны с учетом векторизованных вычислений.
Теперь, если вы можете делать с расстояниями большого круга, я бы посоветовал вам поэкспериментировать с пакетом astropy.coordinates
, чтобы можно было вычислять separations
между точками векторным способом.
Вот пример, основанный на моем ответе на другой вопрос: Поиск ближайшей точки :
from astropy.units import Quantity
from astropy.coordinates import SkyCoord, EarthLocation
from astropy.constants import R_earth
import numpy as np
lon1 = Quantity([-71.312796, -87.645307, -87.640426, -87.635513,
-87.630629, -87.625793 ], unit='deg')
lat1 = Quantity([41.49008, 41.894577, 41.894647, 41.894713,
41.894768, 41.894830], unit='deg')
lon2 = Quantity([-81.695391, -87.645307 + 0.5, -87.640426, -87.635513 - 0.5,
-87.630629 + 1.0, -87.625793 - 1.0], unit='deg')
lat2 = Quantity([41.499498, 41.894577 - 0.5, 41.894647, 41.894713 - 0.5,
41.894768 - 1.0, 41.894830 + 1.0], unit='deg')
pts1 = SkyCoord(EarthLocation.from_geodetic(lon1, lat1, height=R_earth).itrs, frame='itrs')
pts2 = SkyCoord(EarthLocation.from_geodetic(lon2, lat2, height=R_earth).itrs, frame='itrs')
Тогда расстояния между двумя наборами точек можно вычислить как:
>>> dist = pts2.separation(pts1)
>>> print(dist)
<Angle [ 7.78350849, 0.62435354, 0., 0.62435308, 1.25039805, 1.24353876] deg>
Приблизительное преобразование в расстояние:
>>> np.deg2rad(pts2.separation(pts1)) * R_earth / u.rad
<Quantity [ 866451.17527216, 69502.31527953, 0. ,
69502.26348614, 139192.86680148, 138429.29874024] m>
Сравните первое значение с тем, что вы получите из примера geopy
:
>>> distance.distance((41.49008, -71.312796), (41.499498, -81.695391)).meters
866455.4329098687
РЕДАКТИРОВАТЬ: На самом деле, вполне возможно, что это может дать вам геодезическое расстояние, что вы после, но обязательно проверьте описание EarthLocation
.