You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将OSM ID列表转换为GeoJSON格式在folium中绘制?

解决方案

核心思路

使用OSMnx库批量拉取OSM关系ID对应的行政边界数据,自动处理多面拓扑避免报错,全程无手动下载操作,直接生成可用于folium的GeoJSON数据。

操作步骤

1. 安装依赖

执行命令安装所需工具库:
pip install osmnx folium

2. 完整可运行代码

import folium
import osmnx as ox
import geopandas as gpd

# 开启缓存避免重复请求,提升运行效率
ox.settings.use_cache = True
# 遇到接口超时可适当调大该参数
ox.settings.timeout = 120

# 填入你所有的42个OSM关系ID即可
osm_relation_ids = [4791885, 2417889, 2822130]

# 批量拉取所有ID对应的边界几何
gdf = ox.geometries_from_osm_ids(
    ids=osm_relation_ids,
    id_type="relation"
)

# 此处可关联你的人口数据,通过osmid字段匹配即可用于后续choropleth着色
# gdf = gdf.merge(你的人口数据表, left_on="osmid", right_on="你表中存储的OSM ID字段")

# 直接生成GeoJSON数据,无需存储本地文件
geojson_data = gdf.to_json()

# 绘制地图
boulder_coords = [41.3874, 2.1686]
my_map = folium.Map(location = boulder_coords, zoom_start = 7.5)

folium.GeoJson(
    geojson_data,
    name="区县边界"
).add_to(my_map)

folium.LayerControl().add_to(my_map)
my_map

说明

  • 原报错是因为osm2geojson对带洞、多组成部分的复杂多面边界支持不完善,OSMnx底层自动处理拓扑逻辑,可完美兼容行政类多面边界
  • 第一次拉取42个边界数据耗时约10-30秒,开启缓存后后续运行无需重新请求接口
  • 拉取得到的GeoDataFrame自带OSM ID、区域名称等属性,可直接和人口数据关联实现分级着色的人口密度热力图

内容的提问来源于stack exchange,提问作者G. Macia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:24:01