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

Overpass按区域邻近性查询:水域码头搜索难题

解决Overpass查询水域边界码头的问题

你遇到的情况很常见——码头通常附着在水域边缘,而非完全落在水域的OSM区域范围内,所以直接用nwr(area.mywater)会返回空结果。下面提供两种可行的解决思路:

方法一:空间邻近性查询(捕捉水域周边码头)

利用Overpass的around过滤器,搜索水域周边特定距离内的码头,灵活适配边界场景。

示例代码:

[out:json][timeout:180];
// 获取目标水域
wr["name"]["natural"="water"]["water"!="river"]["boat"!="no"](if: length() > 3000)(
  46.762191510926186,
  -92.08509489611468,                                                                                    
  46.76367911337914,  
  -92.08318778203628
)->.mywater;
// 搜索水域周边20米范围内的码头(可按需调整距离)
nwr["man_made"="pier"](around.mywater:20);
// 输出结果
(._;>;);
out body;
>;
out skel qt;

说明:around.mywater:20表示检索距离水域元素20米内的码头,距离数值可根据实际场景调整(如10米、50米)。

方法二:精准匹配边界接触的码头

先获取边界框内的所有码头,再通过touches筛选出与水域边界直接接触的对象,精准匹配你的场景。

示例代码:

[out:json][timeout:180];
// 获取目标水域
wr["name"]["natural"="water"]["water"!="river"]["boat"!="no"](if: length() > 3000)(
  46.762191510926186,
  -92.08509489611468,                                                                                    
  46.76367911337914,  
  -92.08318778203628
)->.mywater;
// 筛选边界框内与水域接触的码头
nwr(
  46.762191510926186,
  -92.08509489611468,                                                                                    
  46.76367911337914,  
  -92.08318778203628
)["man_made"="pier"](if: touches(mywater));
// 输出结果
(._;>;);
out body;
>;
out skel qt;

说明:touches(mywater)会精准筛选出与水域元素边界直接接触的码头,完全适配码头位于水域边缘的情况。

补充提示

  • Overpass的area仅针对带有area=yes标签或闭合way生成的区域,若目标水域未标记为区域类型,直接用area.mywater会失效。
  • 优先推荐方法二,因为touches无需调整距离参数,能精准匹配边界接触场景,避免无关结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:20:26