Overpass查询如何筛选完全位于指定区域内的relation要素
关于返回部分重叠要素是否为Bug
这是Overpass的正常逻辑,不是Bug。relation(area.germany)这类区域过滤器的默认匹配规则是:只要要素和指定区域存在任意空间重叠就会命中,不会校验要素是否完全落在区域内。边境处的跨国家行政区只要有部分范围落在查询区域内就会被返回,属于预设的设计逻辑,符合预期。
实现仅返回完全位于德国境内联邦州的方案
该需求可以通过二次范围校验实现,在原有查询基础上增加范围包含校验逻辑即可,修正后的查询语句如下:
[out:json]; relation(51477); map_to_area -> .germany; relation(area.germany)["type"="boundary"]["boundary"="administrative"]["admin_level"="4"]; // 新增完全包含校验逻辑 map_to_area -> .candidate; area.candidate(area.germany); relation(pivot); out tags;
新增逻辑说明:
- 首先把初步筛选到的所有四级行政区relation转为对应面要素
- 校验这些面要素是否完全被德国区域包含,仅保留符合条件的结果
- 再通过
pivot操作把筛选后的面要素关联回对应的原始relation输出,最终得到的就是完全属于德国的联邦州列表,会自动过滤掉格罗宁根这类仅部分和德国重叠的荷兰行政区。
内容的提问来源于stack exchange,提问作者foodev
相关产品推荐
相关产品推荐

