Python中将geovoronoi生成的Voronoi多边形添加到Folium地图的问题
实现步骤
- 先将
geovoronoi返回的多边形对象转换为GeoDataFrame - 统一坐标系为Folium兼容的WGS84(EPSG:4326)
- 直接通过
folium.GeoJson添加到已有地图中
完整代码示例
在你生成polyShapes, puntos的代码后追加以下内容即可:
# 构造Voronoi多边形GeoDataFrame,继承输入点位的坐标系 gdf_voronoi = gpd.GeoDataFrame( geometry=list(polyShapes.values()), crs=coords.crs ) # 可选:关联原始点位的属性字段,可用于弹窗展示或自定义样式 region_point_map = {reg_id: idx for idx, reg_id in enumerate(puntos)} point_idx_list = [region_point_map[reg_id] for reg_id in polyShapes.keys()] gdf_voronoi = gdf_voronoi.join( coords.reset_index(drop=True), on=point_idx_list, rsuffix="_origin" ) # 转换为Folium兼容的WGS84坐标系,若原始数据已为EPSG:4326可跳过 gdf_voronoi = gdf_voronoi.to_crs(epsg=4326) # 过滤无效多边形避免渲染报错 gdf_voronoi = gdf_voronoi[gdf_voronoi.is_valid & ~gdf_voronoi.is_empty] # 添加到已有Folium地图mapaMilagro folium.GeoJson( data=gdf_voronoi, style_function=lambda x: { "fillColor": "#3388ff", # 自定义填充色 "color": "#000000", # 边界颜色 "weight": 1, # 边界宽度 "fillOpacity": 0.3 # 填充透明度 }, # 可选:添加弹窗展示点位信息,fields内替换为你实际需要展示的字段名 popup=folium.GeoJsonPopup(fields=["id", "name"]) ).add_to(mapaMilagro)
说明
如果你不需要关联原始点位的属性,跳过属性关联的可选步骤即可,核心逻辑和你之前添加城市范围多边形的逻辑完全一致,仅需将源数据替换为构造的Voronoi GeoDataFrame即可。
内容的提问来源于stack exchange,提问作者FGMN
相关产品推荐
相关产品推荐

