【问题标题】:How can I find all nodes around a point that are members of a way with a certain tag?如何找到一个点周围的所有节点,这些节点是具有特定标签的方式的成员?
【发布时间】:2014-12-07 04:34:30
【问题描述】:

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

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

【问题讨论】:

    标签: overpass-api


    【解决方案1】:

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

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

    在 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

    【讨论】:

    • 谢谢,这很有趣,我不知道过滤器可以以这种方式组合。
    猜你喜欢
    • 2023-04-02
    • 2014-07-21
    • 1970-01-01
    • 2019-06-12
    • 2012-06-05
    • 1970-01-01
    • 2021-11-07
    • 2014-07-06
    • 1970-01-01
    相关资源
    最近更新 更多