【问题标题】:How do i work with .osm files in terms of creation of nodes and edges so i can put it on a Djikstra Algorithm?我如何使用 .osm 文件来创建节点和边,以便我可以将它放在 Djikstra 算法上?
【发布时间】:2016-12-04 11:21:03
【问题描述】:
我有一个 MetroManila.osm 文件,我对其进行了解析,因此它只能使用以下命令读取道路:--keep = --keep-nodes=highway --keep-ways=。这是仅过滤道路的正确命令吗?
解析后我想要的是创建一个有交叉点或曲线的节点,或者是否可以仅使用 MetroManila.osm 中的整个节点?我可以使用它创建边缘吗?我该怎么做?目前,我真的不知道该怎么做,因为我在 android studio 和 osmdroid 上还很新。
【问题讨论】:
标签:
android-studio
openstreetmap
osmdroid
【解决方案1】:
这与 Android 或 osmdroid 没有任何关系。
要了解如何从 OSM 文件创建路由图,请参阅help.openstreetmap.org 的相关答案。引用自它:
- 解析所有方式;扔掉那些不是道路的,而对于其他的,记住它们所包含的节点 ID,方法是为每个引用的节点增加一个“链接计数器”。
- 第二次解析所有方式;一条路通常会成为一条边,但如果除了第一个和最后一个之外的任何节点的链接计数器大于 1,则在该点将路分成两条边。链接计数器为 1 且既不是第一个也不是最后一个的节点可以被丢弃,除非您需要计算边的长度。
- (如果您需要图形节点的几何图形)现在解析 XML 的节点部分,记录您保留的所有节点的坐标。
还可以查看 OSM wiki 中的 routing 以获取一些一般提示以及现有工具和库。
关于osmdroid:如果你不依赖离线路由,那么看看osmbonuspack,它支持在线路由。
如果您不想重新发明轮子,那么只需使用 OSM wiki 中提到的现有离线路由工具之一。