能否通过OSMnx或其他方式从OpenStreetMap提取人行道宽度?
用OSMnx提取OpenStreetMap中人行道宽度的方法
首先明确:可以提取,但结果取决于OpenStreetMap对应区域的人行道数据是否包含宽度属性——OSM是众包数据,并非所有人行道都有宽度标注,巴黎的核心区域可能有部分数据,但仍存在大量缺失情况。
具体实现步骤
基于你已有的代码,可通过以下方式提取宽度信息:
- 将步行网络转换为GeoDataFrame
把图的边数据导出为GeoDataFrame,方便筛选和查看属性:
# 提取边的GeoDataFrame(nodes=False只取边数据) walk_edges_proj = ox.graph_to_gdfs(walk_proj, nodes=False)
- 筛选独立人行道的宽度
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']))
- 提取街道附属人行道的宽度
这类人行道是主街道的附属设施,通过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
相关产品推荐
相关产品推荐

