【问题标题】:Overpass relation railway segments立交关系铁路段
【发布时间】:2014-11-05 16:07:34
【问题描述】:

我想查询Overpass Api 了解特殊关系(铁路)的距离。请求很好,并返回我所有感兴趣的 relationwaynode 对象。汉堡示例:

[out:json];(rel(53.55224324163863, 10.006766589408304, 53.55314275836137, 10.008081410591696)["route"="train"];>;);out body;

在 Overpass 中,每个relation 对象都有定义此关系的成员。对于way 对象,您可以解析其node 属性的纬度/经度并以此方式计算距离。如果你总结所有的距离,它似乎是合理的。

但是,relation 的成员类型为node(大多数情况下,他们有一个“停止”的role),这似乎代表了来自该relation 的正确停止顺序.但相反,他们在成员之间,他们大致在最后。 如果我尝试查看道路内部的停靠点,它们并不都存在。我应该如何计算两个特定站点之间的距离?

【问题讨论】:

    标签: openstreetmap relation overpass-api


    【解决方案1】:

    似乎对关系存在误解。关系成员不一定要排序。因此,如果有必要,您可能必须自己对成员进行排序。

    您可以查看JOSM,它具有针对各种类型关系的简洁排序算法。但我认为它无法将角色停止的成员放置在正确的位置。这并不总是可能的,因为不一定必须在每个节点上使用 stop 角色拆分方式。这也意味着单一方式可以包含多个具有停止角色的节点,从而无法正确排序关系成员。除非您对每种方式进行相应的预处理。

    为了计算每个站点之间的距离,似乎没有必要对元素进行排序。只需按照这种方式遍历所有每个节点并检查每个节点是否在相应关系中具有停止角色。当到达路径的尽头时,继续与在其开始或结束处共享相同节点并且也是关系成员的那个节点。

    【讨论】:

    • 如果这些方式也没有排序,那么迭代它们将非常困难。我应该如何找到开始迭代的第一种方式?
    • 第一个(或最后一个)方式是其第一个(或最后一个)节点不与任何其他方式共享的方式。另请注意,连续路可以有不同的方向,即路的最后一个节点可以是后续路的第一个最后一个节点。如果您在理解数据模型时遇到问题,您可能想直接使用editors 之一查看地图数据。
    • 我的最后一次尝试表明,您不正确地找出第一个方式成员。我花了大约 3 个小时来调试我的代码,只是发现有时会丢失链接,这意味着不止一种方式没有匹配的开始或结束节点......
    • 当然,您不能期望关系(或一般数据)总是正确的。 OSM 数据不断变化,这反过来又有时会导致一些小错误再次出现和消失。这也适用于其他来源的数据。
    • 路 191079938 没有连接到路线的其余部分,这是正确的。我看不到路 28679354 的间隙。路 135863150 是一个特例,请看本节:openstreetmap.org/relation/1304744#map=15/54.0724/12.1453 相邻路之一必须使用两次。是的,这并不总是那么容易:)。并且关系 1788865 在某些部分被破坏,必须修复,这是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 2018-02-19
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多