如何用OSMnx自定义过滤器获取区域内所有OSM道路类型?
获取指定区域所有OSM道路类型的简便方法
错误原因分析
- 第一段代码用
custom_filter="%s"报错,是因为%s是Python字符串占位符,未赋值就直接作为Overpass QL过滤器传入,语法无效导致报错。 - 第二段代码
custom_filter="highway"未返回所有道路类型,是因为network_type="all"会覆盖custom_filter的部分逻辑,且单纯的highway不符合Overpass QL的标签匹配语法。
- 第一段代码用
正确实现代码
无需逐个枚举道路类型,直接用Overpass QL的标签存在性匹配语法,同时不要指定network_type(指定后会覆盖custom_filter):import osmnx as ox place_name = "Moscow" # 匹配所有带highway标签的OSM元素 G = ox.graph_from_place(place_name, custom_filter='["highway"]')验证获取的道路类型
提取图中所有边的highway属性,确认所有返回的道路类型:highway_types = set() for u, v, data in G.edges(data=True): highway_val = data.get("highway") if isinstance(highway_val, list): highway_types.update(highway_val) else: highway_types.add(highway_val) print("该区域现存的OSM道路类型:", highway_types)
内容的提问来源于stack exchange,提问作者something-original
相关产品推荐
相关产品推荐

