如何找到一个点周围的所有节点,这些节点是具有特定标记的方式的成员?

时间:2014-10-12 14:05:34

标签: overpass-api

我想在一定范围内找到所有高速公路方式的成员节点。我不知道如何在不使用交集的情况下执行此操作,但是,这不在API中。例如,我有这个:

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

结果集.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;

这给出了我想要的结果但可以简化吗?我确定我在这里遗漏了一些东西。

1 个答案:

答案 0 :(得分:5)

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

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

在Overpass QL中,它的内容如下:

[out:json];
node(around:25, 50.61193,-4.68711);
way(bn)[highway];
node(w)(around:25, 50.61193,-4.68711);
out;

Overpass Turbo

上试用