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

Posted

技术标签:

【中文标题】如何仅获取路径节点的附近子集【英文标题】:How to get only the nearby subset of a way's nodes 【发布时间】:2016-12-19 18:13:08 【问题描述】:

我正在使用 Overpass API 来查询 Open Street Maps 中的附近路段。我很确定我的查询正在返回附近waynodes所有 ...但我只想要附近@ 的附近 nodes 987654325@.

In the documentation it references this problem:

一般来说,您会更感兴趣的是完整的数据,而不仅仅是 单一类型的元素。首先,有几个有效的定义 “完整的地图数据”是什么意思。第一个不清楚的话题是什么 处理边界框外的节点,这些节点是方式的成员 部分位于边界框内。

对关系重复同样的问题。如果你等待转弯 限制,您可能更喜欢获取关系的所有元素 包括。如果您的边界框击中例如俄罗斯的边界, 你可能不想下载一万公里的边界 大约半个世界。

但是看了后面的例子,没有看到解决办法。

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

我当前的查询是

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

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

【问题讨论】:

【参考方案1】:

实际上,它甚至更复杂一些,因为您需要设置 100m 距离内的所有节点和属于其中一种相关方式的节点的交集。您的查询应如下所示:根据需要调整距离、标记方式。

请注意,根据标记的不同,不能保证您会在一定距离内找到节点,尤其是在道路比较直且较长的情况下。这肯定会影响您的结果,因此可能需要对合适的半径进行一些试验。

// 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;

在立交桥turbo中查看:http://overpass-turbo.eu/s/hPV

【讨论】:

以上是关于如何仅获取路径节点的附近子集的主要内容,如果未能解决你的问题,请参考以下文章

c语言中如何获取树中所有叶子节点的路径

如何获取从根到二叉树上给定节点的路径?

如何使用 git log 仅获取带有路径的文件名?

java中jtree双击叶节点如何获取该文件所在的路径

如何从 response.body 获取节点中 '<img src=''>' 的绝对路径

如何使用nodejs获取节点docker容器中的主机主目录路径?