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

Overpass查询:如何提取关系中至少带一个tag的所有node与way

Overpass查询:筛选multipolygon关联的带标签元素

需求说明

在指定bbox范围内检索所有type=multipolygon的relation,提取这些relation关联成员中至少带有1个tag的way与node元素。
原有查询会返回所有关联成员,包含大量无tag的几何构成节点,无法满足筛选要求,原有代码如下:

[bbox: 48.18329,16.3765,48.18466,16.37787];
rel["type" = "multipolygon"] -> .relation;
way(r.relation);
(._;>>;;);
/*end of auto repair*/
out body;

实现方案

Overpass QL中可以用正则过滤器[~"."~"."]匹配所有带至少1个非空tag的元素:该过滤器会匹配任意非空键名、对应非空值的标签,刚好覆盖「至少带1个tag」的筛选规则,不需要枚举所有可能的标签键。
优化后的查询代码如下:

[bbox: 48.18329,16.3765,48.18466,16.37787];
// 筛选范围内所有multipolygon类型的relation
rel["type"="multipolygon"] -> .multipolygons;
// 提取所有关联成员中带至少1个tag的way、node
(
  way(r.multipolygons;>>;)[~"."~"."];
  node(r.multipolygons;>>;)[~"."~"."];
  // 若需要同时返回原始multipolygon relation,取消下一行注释即可
  // .multipolygons;
);
out body;

逻辑说明

  • r.multipolygons;>>; 表示递归获取目标relation的所有层级成员,覆盖嵌套relation、way、node的全量关联元素
  • 后缀的[~"."~"."]直接在取元素阶段完成过滤,排除所有无tag的几何构成节点、无tag的内部way,不需要额外做结果集筛选,查询效率更高
  • 如果后续需要调整筛选规则,比如只保留带名称的元素,直接把正则过滤器替换为["name"]即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:20:03