Folium按行程ID分组绘制各行程GPS坐标点间路线问题求解
解决方法
问题根源
你原来的代码存在两处核心错误:
groupby('id')返回的是Pandas分组迭代对象,不能直接用你写的方式索引坐标值,所以加了这段代码后会运行报错- 直接遍历全表索引
i取i和i+1的坐标,会跨行程ID取点,导致不同行程的点被错误连接
修改后代码
import folium import pandas as pd # 初始化地图,可替换为你原来的地图初始化逻辑 map = folium.Map(location=[df['latitude'].mean(), df['longitude'].mean()], zoom_start=12) tooltip = "Click me!" # 按行程ID分组逐个处理 for trip_id, trip_df in df.groupby('id'): # 提取当前行程的所有坐标点,folium坐标顺序为[纬度, 经度] coords = trip_df[['latitude', 'longitude']].values.tolist() # 给当前行程的每个坐标点添加标记 for lat, lng in coords: folium.Marker( [lat, lng], popup=f"行程ID: {trip_id}", tooltip=tooltip ).add_to(map) # 绘制当前行程的连线,自动按坐标顺序连接同行程所有点 folium.PolyLine( coords, tooltip=f"行程ID: {trip_id}", weight=3, # 可自定义调整线宽 color='blue' # 可自定义调整线条颜色 ).add_to(map) # 保存或展示地图 map.save('trips_route.html')
代码说明
- 先通过
groupby('id')把所有行程拆分,每个行程单独处理,完全避免跨行程连线的问题 - 直接提取单个行程的全部坐标列表传给
PolyLine,无需手动循环拼接相邻坐标点,代码更简洁也不会出现索引越界问题 - 你可以根据需求调整连线的粗细、颜色、透明度等参数,适配你的展示需求
内容的提问来源于stack exchange,提问作者Hermoine
相关产品推荐
相关产品推荐

