如何修复Overpass QL查询以获取指定道路的前后关联道路?
修复Overpass QL查询以获取目标道路及其前后关联道路
原查询存在两个关键语法与逻辑错误:
- 提取way首尾节点的语法不合法:
w.way.nodes[0]并非Overpass QL的正确写法,无法精准获取目标way的首尾节点ID。 around搜索不符合需求:你的需求是基于节点关联关系(前序way的最后节点=原way首节点,后序way的首节点=原way尾节点),而非坐标范围搜索,around无法实现这种精准匹配。
以下是修复后的查询代码:
[out:json][timeout:25]; // 获取目标道路并保存到集合 way(805290645)->.target_way; // 提取目标道路的首节点和尾节点 .node(w.target_way)[0]->.first_node; .node(w.target_way)[-1]->.last_node; // 查询前序道路:所有highway类型way,且其最后一个节点等于目标道路的首节点 way["highway"](node(last: .first_node))->.prev_ways; // 查询后序道路:所有highway类型way,且其第一个节点等于目标道路的尾节点 way["highway"](node(first: .last_node))->.next_ways; // 合并需要输出的所有道路 ( .target_way; .prev_ways; .next_ways; ); // 输出包含元数据的结果 out meta;
修复说明:
- 使用
.node(w.target_way)[0]和.node(w.target_way)[-1]是Overpass QL中提取way首尾节点的标准写法,确保能正确获取目标节点。 - 通过
node(last: .first_node)和node(first: .last_node)精准匹配节点关联关系,完全符合你对前序、后序道路的定义。 - 添加
timeout:25避免查询超时,这是Overpass查询的常规优化项。
内容的提问来源于stack exchange,提问作者atthijs98
相关产品推荐
相关产品推荐

