Overpass Query结果差异疑问:无[maxsize]为何返回更小数据集?
Overpass查询结果差异原因及解决方案
差异原因
两条查询的核心区别在于递归获取依赖元素的范围:
第一条查询逻辑:
- 先抓取指定边界内的所有节点
- 筛选出引用这些节点的符合条件的道路way
- 仅对这些way执行
(._;>;)——也就是获取这些way关联的所有子元素(包括不在初始边界内的节点、关系等) - 最终输出的是「符合条件的way + 这些way的依赖元素」,初始边界内没被任何目标way引用的孤立节点不会被输出。
第二条查询逻辑:
- 把「初始边界内的所有节点」和「引用这些节点的符合条件的way」放在同一个集合里
- 对这个完整集合执行
(._;>;)——不仅会获取way的依赖元素,还会保留初始边界内所有孤立节点(即便它们没有关联元素) - 最终输出包含「初始边界内所有节点 + 符合条件的way + 所有相关依赖元素」,文件自然更大。
关于第一条是否完整
如果你的目标是获取指定区域内的道路及其关联元素,第一条查询的结果是完整的——它没有遗漏任何符合条件的道路,以及这些道路必需的所有节点/关系。只是它自动排除了区域内和道路无关的孤立节点。
让两条结果相同的方案
方案1:修改第二条查询,对齐第一条逻辑
把第二条里的递归操作限定在way查询块内,同时保留maxsize参数避免报错:
[out:xml][maxsize:2000000000]; node(33.68336,-117.89466,34.14946,-117.03498); way["highway"~"motorway|motorway_link|trunk|trunk_link|primary|primary_link|secondary|secondary_link|tertiary|tertiary_link|road|residential|service"](bn); (._;>;); out;
方案2:修改第一条查询,匹配第二条结果
如果需要保留初始区域内的所有节点,同时加上道路元素,可调整第一条查询的结构并添加maxsize:
[out:xml][maxsize:2000000000]; ( node(33.68336,-117.89466,34.14946,-117.03498); way["highway"~"motorway|motorway_link|trunk|trunk_link|primary|primary_link|secondary|secondary_link|tertiary|tertiary_link|road|residential|service"](bn); ); (._;>;); out;
内容的提问来源于stack exchange,提问作者markai
相关产品推荐
相关产品推荐

