如何将含POLYGON的DataFrame转换为GeoJSON用于choropleth_mapbox?
解决Pandas DataFrame转GeoJSON用于choropleth_mapbox的方法
要把带WKT格式多边形的DataFrame转换成GeoJSON,核心是先把字符串格式的WKT转为空间几何对象,再导出。以下是具体步骤:
步骤1:安装依赖库
首先确保安装了geopandas(处理空间数据的扩展库):
pip install geopandas
步骤2:转换WKT为几何对象并创建GeoDataFrame
利用geopandas把DataFrame中的boundaries列(WKT格式)转为几何对象,再构建GeoDataFrame:
import pandas as pd import geopandas as gpd # 你的原始DataFrame df = pd.DataFrame({ "zone":["A","B"], "boundaries":["POLYGON ((10.90973 43.67753, 10.90903 43.68038, ..., 10.90973 43.67753))","POLYGON ((10.93576 43.72298, 10.93573 43.72162, ..., 10.93576 43.72298))"] }) # 将WKT字符串转为几何对象 df['geometry'] = gpd.GeoSeries.from_wkt(df['boundaries']) # 创建GeoDataFrame,指定坐标系(Mapbox适配WGS84,即EPSG:4326) gdf = gpd.GeoDataFrame(df, geometry='geometry', crs="EPSG:4326") # 可选:删除原始的boundaries列,精简数据 gdf = gdf.drop('boundaries', axis=1)
步骤3:导出为GeoJSON
直接用GeoDataFrame的to_file方法导出到本地文件,或者用to_json获取字符串格式:
# 导出到本地GeoJSON文件 gdf.to_file("zones.geojson", driver='GeoJSON') # 如果需要直接获取GeoJSON字符串(用于直接传入plotly) geojson_str = gdf.to_json()
用于plotly choropleth_mapbox的示例
导出后可直接在plotly中调用该GeoJSON生成可视化:
import plotly.express as px # 为每个区域添加数值数据(示例) gdf['value'] = [15, 25] fig = px.choropleth_mapbox(gdf, geojson=gdf.geometry, locations=gdf.index, color='value', mapbox_style="carto-positron", center={"lat": 43.7, "lon": 10.92}, zoom=12) fig.show()
常见问题排查
- 若转换报错,检查WKT格式是否合规:确保多边形首尾坐标一致(闭合),无语法错误。
- 必须设置坐标系为EPSG:4326,否则Mapbox无法正确识别空间位置。
内容的提问来源于stack exchange,提问作者arrabattapp man
相关产品推荐
相关产品推荐

