You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Geopandas DataFrame中计算坐标距离时遇类型错误求助

解决Geopandas批量计算两点距离的报错问题

错误原因

你在apply里调用distance.distance()时,错误地将两个坐标元组包裹成了单个参数(外层多套了一层括号),而distance.distance()需要接收两个独立的坐标元组作为位置参数,这就导致了类型不匹配的报错。

修正后的代码

把外层多余的括号去掉,同时记得加上.meters来获取以米为单位的距离(和你单行计算的逻辑保持一致):

gdf['distance'] = gdf.apply(lambda x: distance.distance(
    (x['start_lat'], x['start_lng']), 
    (x['end_lat'], x['end_lng'])
).meters, axis=1)

更高效的批量计算方案(推荐)

apply在处理大数据集时效率较低,推荐使用向量化操作来提升性能:

  1. 先将起点和终点坐标转换为geopandas的Point对象
  2. 直接计算点与点之间的距离

代码示例:

from shapely.geometry import Point

# 生成起点和终点的Point列
gdf['start_point'] = gdf.apply(lambda x: Point(x['start_lng'], x['start_lat']), axis=1)
gdf['end_point'] = gdf.apply(lambda x: Point(x['end_lng'], x['end_lat']), axis=1)

# 批量计算距离(若为WGS84经纬度,需转换为米:粗略转换用*100000,更准确的方式是先投影到平面坐标系)
gdf['distance'] = gdf['start_point'].distance(gdf['end_point']) * 100000

内容的提问来源于stack exchange,提问作者conrado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:50:28