如何仅获取方式节点的附近子集

时间:2016-08-12 16:45:48

标签: geospatial openstreetmap geo overpass-api

我正在使用Overpass API查询附近路段的Open Street Maps。我很确定我的查询正在返回所有附近nodes的{​​{1}} ...但我只想附近 {{1附近的way

In the documentation it references this problem

  

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

     

同样的问题重复了关系。如果你等了转   限制,您可能更愿意获得关系的所有元素   包括在内。如果你的边界框击中了俄罗斯的边界,   你可能不想下载数万公里的边界   大约一半的世界。

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

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

我当前的查询是

nodes

我想也许我需要将其更改为way,然后向上递归到way (around:100,50.746,7.154) [highway~"^(secondary|tertiary)$"]; >; out ids geom; 以查询高速公路标签,但我不确定我是否在正确的轨道上

1 个答案:

答案 0 :(得分:2)

实际上,它甚至有点复杂,因为你需要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;

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