寻找R语言geosphere::distGeo的Python等效匹配函数
匹配R
geosphere::distGeo 输出的Python解决方案 问题根源在于坐标输入顺序的差异:
geosphere::distGeo要求坐标以 经度(Longitude)在前,纬度(Latitude)在后 的顺序传入- 你当前的R代码传入的是
(lat, lon),导致计算的是错误坐标点的距离;而Pythongeopy.distance.geodesic默认接受(lat, lon)顺序,得到的是真实地理距离
以下两种方法可让Python输出与你当前R代码完全一致的结果:
方法1:调整坐标顺序使用geopy
将坐标反转成(lon, lat)传入geodesic,模拟R代码中的参数顺序:
from geopy.distance import geodesic # 坐标顺序改为 (经度, 纬度) lyon = (4.8422, 45.7597) paris = (2.3508, 48.8567) print(geodesic(lyon, paris, ellipsoid="WGS-84").km) # 输出:440.7626 km
方法2:用pyproj精确复现distGeo逻辑
distGeo底层基于WGS84椭球的测地线算法,可通过pyproj.Geod完全复现:
from pyproj import Geod # 初始化与distGeo默认参数一致的WGS84椭球对象 geod = Geod(ellps="WGS84") # 传入参数格式:(lon1, lat1, lon2, lat2) _, _, distance = geod.inv(4.8422, 45.7597, 2.3508, 48.8567) print(distance / 1000) # 输出:440.7626 km
额外说明
如果你的目标是计算真实的里昂-巴黎地理距离,应修正R代码的坐标顺序为(lon, lat):
lyon = c(4.8422, 45.7597) # (经度, 纬度) paris = c(2.3508, 48.8567) geosphere::distGeo(lyon, paris) / 1000 # 输出:392.4315 km
此时Python使用原始(lat, lon)坐标传入geodesic即可得到一致的正确结果。
内容的提问来源于stack exchange,提问作者gdevaux
相关产品推荐
相关产品推荐

