使用OSMnx提取佛兰德斯骑行节点网络:仅获节点问题求助
解决方案
问题根源
你用ox.geometries_from_place仅拿到节点数据,主要有两个原因:
- 默认查询模板未递归获取关系/路径的子元素(对应Overpass里的
>; out skel qt逻辑),无法完整拉取网络拓扑; - Nominatim返回的区域边界可能和你在Overpass Turbo中使用的边界不完全匹配,导致查询范围存在差异。
解决方法:使用自定义Overpass查询直接调用
既然你已经在Overpass Turbo中成功获取到目标数据,直接将该查询移植到OSMnx中,用ox.geometries_from_overpass执行即可,这样能完全复现Turbo中的查询逻辑和范围。
示例代码
import osmnx as ox # 替换成你在Overpass Turbo中验证过的查询语句 overpass_query = """ [out:json][timeout:25]; # 精准匹配鲁汶的区域边界,避免Nominatim的歧义匹配 area["name"="Leuven"]["admin_level"="8"]->.searchArea; # 同时查询节点、路径、关系三种元素 ( node["network:type"="node_network"](area.searchArea); way["network:type"="node_network"](area.searchArea); relation["network:type"="node_network"](area.searchArea); ); out body; # 递归获取关联的子元素,确保完整网络结构 >; out skel qt; """ # 执行查询并获取完整几何数据 Leuven_test = ox.geometries_from_overpass(overpass_query) # 验证结果 print(Leuven_test.head()) Leuven_test.plot()
额外说明
- 若不确定Overpass查询的区域边界,可直接在Overpass Turbo中导出查询语句后复制到代码中;
- 处理大范围数据时,可适当调高超时时间(将
timeout:25改为更大数值); - 若后续需要构建拓扑图而非单独几何元素,可基于获取到的几何数据用
ox.graph_from_gdfs转换为NetworkX图结构。
内容的提问来源于stack exchange,提问作者aj94
相关产品推荐
相关产品推荐

