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

能否通过OSMnx或其他方式从OpenStreetMap提取人行道宽度?

用OSMnx提取OpenStreetMap中人行道宽度的方法

首先明确:可以提取,但结果取决于OpenStreetMap对应区域的人行道数据是否包含宽度属性——OSM是众包数据,并非所有人行道都有宽度标注,巴黎的核心区域可能有部分数据,但仍存在大量缺失情况。

具体实现步骤

基于你已有的代码,可通过以下方式提取宽度信息:

  1. 将步行网络转换为GeoDataFrame
    把图的边数据导出为GeoDataFrame,方便筛选和查看属性:
# 提取边的GeoDataFrame(nodes=False只取边数据)
walk_edges_proj = ox.graph_to_gdfs(walk_proj, nodes=False)
  1. 筛选独立人行道的宽度
    OSM中独立的人行道(比如纯步行道)通常标记highway属性为footway、pedestrian或path,可直接筛选这类边并提取宽度:
# 筛选独立步行道类型的边
independent_sidewalks = walk_edges_proj[walk_edges_proj['highway'].isin(['footway', 'pedestrian', 'path'])]
# 输出包含宽度数据的条目(过滤无宽度的行)
print("独立人行道宽度数据:")
print(independent_sidewalks[['osmid', 'name', 'width', 'geometry']].dropna(subset=['width']))
  1. 提取街道附属人行道的宽度
    这类人行道是主街道的附属设施,通过sidewalk属性标记(值为left/right/both),宽度通常存放在sidewalk:width或footway:width这类自定义标签中:
# 先查看所有列,确认是否有相关宽度标签
print(walk_edges_proj.columns)

# 筛选带有附属人行道的街道,并提取宽度数据
attached_sidewalks = walk_edges_proj[walk_edges_proj['sidewalk'].notna()]
print("街道附属人行道宽度数据:")
# 根据实际存在的列名调整,比如sidewalk_width、footway_width等
print(attached_sidewalks[['osmid', 'name', 'sidewalk', 'sidewalk_width', 'geometry']].dropna(subset=['sidewalk_width']))

注意事项

  • 数据完整性:OSM中大量人行道没有标注宽度,非核心城区的缺失情况更明显,提取结果可能存在大量空值。
  • 标签多样性:不同贡献者可能用不同标签存储宽度,比如width、sidewalk:width、footway:width,需要根据实际数据调整筛选逻辑。
  • 单位校验:宽度值通常以米为单位,但少数情况下可能是其他单位,需自行校验转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:15:37