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

如何获取指定日期的OSM历史街道数据?已装OSMnx求操作指导

获取指定日期的OpenStreetMap历史街道数据(基于OSMnx)

OSMnx本身没有直接获取历史OSM数据的内置函数,但可以通过结合OSM的历史查询接口或归档快照来实现,以下是两种可行的方案:

方案1:通过Overpass API查询指定日期的街道数据

Overpass API支持查询OSM数据的历史快照,你可以指定目标日期,获取该时间点的街道数据:

  1. 先获取夏洛特市的地理边界,用于限定查询范围:
import osmnx as ox
import requests

# 获取夏洛特市的地理边界
city_gdf = ox.geocode_to_gdf("Charlotte, North Carolina, USA")
# 提取边界的WKT格式字符串,用于Overpass查询
boundary_wkt = city_gdf.geometry.iloc[0].wkt
  1. 构造Overpass查询语句,指定目标日期(格式为YYYY-MM-DDTHH:MM:SSZ,这里用2020-02-08T00:00:00Z),筛选街道类设施(highway标签):
# 构造查询字符串
overpass_query = f"""
[out:xml][timeout:90][date:"2020-02-08T00:00:00Z"];
(
  way["highway"](poly:"{boundary_wkt}");
  relation["highway"](poly:"{boundary_wkt}");
);
out body;
>;
out skel qt;
"""
# 发送请求获取OSM XML数据
response = requests.get("https://overpass-api.de/api/interpreter", params={"data": overpass_query})
response.raise_for_status()
  1. 用OSMnx解析返回的XML数据,转换为街道网络图:
# 解析XML并构建图
G_2020 = ox.graph_from_xml(response.content)
# 同理修改日期参数,获取2024年2月8日的数据

方案2:使用OSM历史归档快照

如果需要批量或更大范围的历史数据,可以使用OSM第三方归档的定期快照:

  1. 找到北卡罗来纳州对应日期的OSM归档文件(格式为.osm.pbf)
  2. 用OSMnx直接读取本地归档文件,构建街道图:
# 读取本地历史OSM文件
G_2020 = ox.graph_from_pbf("path/to/north-carolina-20200208.osm.pbf", network_type="drive")
# 筛选出夏洛特市范围内的节点和边
G_charlotte_2020 = ox.truncate_graph_to_gdf(G_2020, city_gdf)

可视化对比

获取到两个年份的街道图后,直接用OSMnx的可视化函数对比:

# 可视化2020年街道图
fig, ax = ox.plot_graph(G_charlotte_2020, node_size=0, edge_color="blue")
# 可视化2024年街道图
fig, ax = ox.plot_graph(G_charlotte_2024, node_size=0, edge_color="red")

内容的提问来源于stack exchange,提问作者Waqas Kashmary

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:52:42