如何用Python的Folium、Geopandas、Pandas从CSV绘制带悬浮信息的GeoJSON多边形交互地图
解决方案:基于CSV中GeoJSON生成交互式多边形地图
以下是使用pandas、geopandas和folium实现需求的完整流程:
1. 安装依赖库
先确保安装所需Python包:
pip install pandas geopandas folium
2. 完整代码实现
import pandas as pd import geopandas as gpd import folium import json from folium.features import GeoJsonTooltip # 加载CSV数据,替换为你的文件路径 df = pd.read_csv('airport_airspace.csv') # 解析GeoJSON字段并转换为GeoDataFrame df['geometry'] = df['geojson'].apply(lambda x: json.loads(x)['features'][0]['geometry']) gdf = gpd.GeoDataFrame(df, geometry='geometry', crs='EPSG:4326') # 创建基础地图,以第一个多边形中心为初始定位 center_lat = gdf.geometry.iloc[0].centroid.y center_lon = gdf.geometry.iloc[0].centroid.x m = folium.Map(location=[center_lat, center_lon], zoom_start=12) # 配置悬浮弹窗显示内容 tooltip = GeoJsonTooltip( fields=['airport', 'height', 'unique_code', 'start_date'], aliases=['机场代码:', '高度:', '唯一编码:', '生效日期:'], localize=True, labels=True, style=""" background-color: #f0f0f0; border: 1px solid #ccc; border-radius: 4px; padding: 8px; """ ) # 添加多边形到地图并绑定弹窗 folium.GeoJson( gdf, tooltip=tooltip, style_function=lambda x: { 'fillColor': '#4287f5', 'color': '#333', 'weight': 2, 'fillOpacity': 0.4 } ).add_to(m) # 保存为HTML交互地图 m.save('airport_airspace_map.html') print("交互地图已生成:airport_airspace_map.html")
关键细节说明
- GeoJSON解析:CSV中的
geojson列是字符串格式,通过json.loads解析后提取首个Feature的几何信息,转为GeoDataFrame的geometry列。 - 悬浮弹窗:通过
GeoJsonTooltip指定要展示的字段和别名,自定义样式优化显示效果。 - 地图样式:
style_function控制多边形的填充色、边框样式和透明度,保证可视化清晰度。
注意事项
- 替换代码中的CSV文件路径为实际路径;
- 若GeoJSON包含多个Feature,需调整解析逻辑(如遍历所有features);
- 可修改
zoom_start参数调整地图初始缩放级别。
内容的提问来源于stack exchange,提问作者Tarak Pandya
相关产品推荐
相关产品推荐

