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

如何使用OSMnx筛选OpenStreetMap指定Surface类型的道路边?

如何用OSMnX按道路Surface属性筛选道路边?

问题背景

使用OSMnX获取OpenStreetMap数据时,默认生成的道路边GeoDataFrame不包含surface属性(该属性取值包括Unpaved、Asphalt、Gravel等),现有代码如下:

import osmnx as ox

graph = ox.graph_from_place('Bennekom')
nodes, edges = ox.graph_to_gdfs(graph)

解决方案

1. 获取包含Surface属性的道路数据

OSMnX默认的道路网络查询不会自动抓取所有OSM标签,需要在查询时明确指定要获取surface属性。修改代码如下:

import osmnx as ox

# 自定义查询标签,指定获取公路类型与surface属性
graph = ox.graph_from_place('Bennekom', tags={'highway': True, 'surface': True})
nodes, edges = ox.graph_to_gdfs(graph)

注:若使用旧版OSMnX,可能需要用custom_tags参数代替tags,具体以对应版本文档为准。

2. 按Surface类型筛选道路边

得到包含surface列的edges GeoDataFrame后,直接通过布尔索引筛选即可:

# 筛选沥青路面道路
asphalt_roads = edges[edges['surface'] == 'asphalt']

# 筛选未铺装路面道路
unpaved_roads = edges[edges['surface'] == 'unpaved']

# 筛选碎石路面道路
gravel_roads = edges[edges['surface'] == 'gravel']

注意:OSM标签值通常为小写,匹配时需使用小写字符串。

3. 处理缺失Surface属性的道路

若部分道路未标注surface属性,可先剔除这些数据再筛选:

# 移除无surface属性的道路
valid_edges = edges.dropna(subset=['surface'])

# 筛选多种路面类型的道路
target_surfaces = ['asphalt', 'gravel']
filtered_roads = valid_edges[valid_edges['surface'].isin(target_surfaces)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:32:38