【问题标题】:Given a OSM node id, how do I find the previous x points in all directions?给定一个 OSM 节点 id,我如何在所有方向上找到之前的 x 点?
【发布时间】:2016-12-18 19:51:48
【问题描述】:

我有一个 OSM 节点 ID/经纬度,用于道路上的一个点(比如 Z 点)。如何找到之前需要经过的 x 个点才能在各个方向到达 Z?我在想立交桥 API 可以帮助我。但它只能返回带有标签的点。我无法让它返回道路/路上的节点 ID。

您能否建议任何可以提供帮助的 API/教程?

【问题讨论】:

    标签: openstreetmap overpass-api


    【解决方案1】:

    如果我没记错的话,您要问的是:给定一个 osm 节点 id,坐标为 x 和 y,为了从起点到达那里,需要做什么? 如果这是一个很好的问题,这是一个面向图形的问题;您应该创建一个 grah,然后使用一些算法来找到起点和终点之间的所有路线;你应该使用一些面向图形的软件.. 像 neo4j 和空间贡献(https://github.com/neo4j-contrib/spatial) 过去我建立了一个项目,我在其中读取 osmfile,创建图形并使用 A* 算法;你可以看看https://github.com/angeloimm/neo4jAstarTest

    【讨论】:

    • 谢谢安吉洛。在这种情况下,我没有起点。我有一个终点,但我需要从终点找到几个先前的点。您在处理之前获得了完整城市的 OSM 文件并加载到图表中吗?
    • 是的,我下载了 OSM 文件并在 neo4j 中加载
    • 谢谢。你知道 OSM 文件中节点 ID 的顺序是否也是道路中节点 ID 的顺序吗?它是否保持相同的顺序?
    • 不,顺序完全不同。这是行不通的,因为一个节点可以是多种方式的一部分。
    • 我同意@scai
    【解决方案2】:

    我建议从阅读 OSM elements 开始,尤其是节点和方式。然后看看OSM XML format。打开 OSM 编辑器(例如iD)并查看原始数据也可能会有所帮助。

    节点本身没有任何顺序或“下一个节点”。节点可以是一种或多种方式的一部分。每种方式都引用一个有序节点列表。所以你必须查看一个节点所属的所有路,然后查看该路的节点列表来确定前一个和下一个节点。如果节点位于一条路的开头或结尾,那么您必须查看是否有一条或多条连续的路。连续的方式在它们的开始/结束处共享同一个节点。

    【讨论】:

    • 谢谢你。我的问题也是要知道是否每种方式都是有序节点列表。我检查了其中几个。看起来节点以某种方式排序。我想确定一下。你知道我可以用来解析这些庞大数据的最佳技术是什么吗? Hadoop 将无法工作,因为我只有一个 XML 文件并且存在许多相互依赖关系。
    • 是的,一种方式以正确的顺序引用其所有节点。否则就不可能重构几何的方式。但是 OSM XML 不适合这样的查询。您应该将数据导入空间数据库。
    猜你喜欢
    • 2011-11-04
    • 2017-08-30
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多