在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在处理大数据集时效率较低,推荐使用向量化操作来提升性能:
- 先将起点和终点坐标转换为
geopandas的Point对象 - 直接计算点与点之间的距离
代码示例:
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
相关产品推荐
相关产品推荐

