如何找到具有特定标签的方式成员的点周围的所有节点?

z7s*_*g Ѫ 2 overpass-api

我想找到某个半径范围内的所有高速公路成员节点。不使用交集,我看不到如何做到这一点,但是,API中没有。例如我有这个:

[out:json];
way(around:25, 50.61193,-4.68711)["highway"];>->.a; 
(node(around:25, 50.61193,-4.68711) - .a);
out;
Run Code Online (Sandbox Code Playgroud)

结果集不仅.a包含我想要的节点,而且还包含半径以外的节点-如果路途很长,则可能会很大。我可以找到不需要的半径内的所有节点,如上面的完整查询所返回。现在,我始终可以执行第二个around查询,并在Overpass之外执行两个结果集的交集。或者,我可以做另一件事:

[out:json];
way(around:25, 50.61193,-4.68711)["highway"];>->.a; 
(node(around:25, 50.61193,-4.68711) - .a)->.b;
(node(around:25, 50.61193,-4.68711) - .b);
out;
Run Code Online (Sandbox Code Playgroud)

这给出了我想要的结果,但是可以简化吗?我确定我在这里想念什么。

mmd*_*mmd 5

确实,您的查询可以简化到一定程度,我们根本不需要任何差异运算符。我建议采用以下方法:

  • 我们首先查询某个纬度/经度位置和给定半径附近的所有节点。
  • 基于这组节点,我们确定所有方式,其中包含一些以前找到的节点(->提示:这就是为什么我们不需要任何交集或差异!)。
  • 现在,使用我们的公路方式集,我们再次在纬度/经度位置的一定半径内查找这些方式的所有节点。

在立交桥QL中,其内容如下:

[out:json];
node(around:25, 50.61193,-4.68711);
way(bn)[highway];
node(w)(around:25, 50.61193,-4.68711);
out;
Run Code Online (Sandbox Code Playgroud)

天桥Turbo上试用