如何仅获取路径节点的附近子集
Posted
技术标签:
【中文标题】如何仅获取路径节点的附近子集【英文标题】:How to get only the nearby subset of a way's nodes 【发布时间】:2016-12-19 18:13:08 【问题描述】:我正在使用 Overpass API 来查询 Open Street Maps 中的附近路段。我很确定我的查询正在返回附近way
的nodes
的所有 ...但我只想要附近@ 的附近 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
【讨论】:
以上是关于如何仅获取路径节点的附近子集的主要内容,如果未能解决你的问题,请参考以下文章