如何仅获取路线节点的附近子集

问题描述:

我正在使用立交API查询附近路段的开放街景地图。我很确定,我的查询返回所有nodes的附近way ...但我只想要附近nodes的附近way如何仅获取路线节点的附近子集

In the documentation it references this problem

一般情况下,你会,而不是仅仅 单一类型的元素感兴趣的完整数据。首先,“完整地图数据”的含义有几个有效定义 。第一个不清楚的主题是 对边界框外的节点做什么,这些节点是 部分位于边界框内的方式的成员。

同样的问题重复关系。如果您等待轮到 限制,则您可能更愿意获得包含关系 的所有元素。如果你的边界框命中例如俄罗斯的边界, 你可能不想下载世界上一半的一万公里的边界 。

但我看了下面的例子,没有看到解决方案。

基本上,在他们的例子中,我将如何限制返回给那些严格在边界框中的元素(而不是返回俄罗斯的整个边界)?

我当前的查询是

way (around:100,50.746,7.154) [highway~"^(secondary|tertiary)$"]; 
>; 
out ids geom; 

我想也许我需要将其更改为node (around:...),然后递归向上到way来查询高速公路的标签,但我不知道如果我连在正确的轨道上。

事实上,它甚至更复杂一点,因为您需要100米距离内的所有节点的集合交集和属于相关方法之一的那些节点。以下是查询应该如何的样子:根据需要调整距离,标签的方式。

请注意,根据标记,不能保证您会在一定距离内找到节点,特别是如果道路趋于相当直和较长。这肯定会影响你的结果,因此可能需要尝试适当的半径。

// Find nodes up to 100m around center point 
// (center is overpass turbo specific for center point lat/lon in current map view) 
node(around:100,{{center}})->.aroundnodes; 

// recurse up to ways with highway = secondary/tertiary 
way(bn.aroundnodes)[highway~"^(secondary|tertiary)$"]->.allways; 

// determine nodes belonging to found ways 
node(w.allways)->.waynodes; 

( 
// determine intersection of all ways' nodes and nodes around center point 
    node.waynodes.aroundnodes; 
// and return ways (intersection is just a workaround for a bug) 
    way.allways.allways; 
); 
out; 

检查出来立交桥涡轮:http://overpass-turbo.eu/s/hPV