3

我想找到一定半径内的所有高速公路成员节点。如果不使用交集,我看不到如何做到这一点,但是,这不在 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;

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

4

1 回答 1

8

实际上,您的查询可以简化到我们根本不需要任何差分运算符的程度。我会推荐以下方法:

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

在 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上试试

于 2014-10-13T05:49:18.530 回答