如何仅获取路线节点的附近子集
问题描述:
我正在使用立交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