5

这篇 Mapbox 博客文章中,Lauren Budorick分享了他们如何使用 OSRM 的路由引擎,该引擎使用高程数据为骑车者提供更好的路线……太棒了!

我还想在插入外部(用户生成的)数据时探索 OSRM 路由的潜力,但我仍然很难掌握 OSRM 的配置文件是如何工作的。我想我明白了主要的想法,每一种方式(或节点?)都被输送到几个函数中,这些函数加在一起,得分该路径有多好。

但就是这样,我脑子里有很多缺失的部分,比如 Lauren 在她的个人资料中使用的每个功能的作用。如果有人可以向我指出有关所有这些工作原理的更详细信息,那么您将使我的下周变得更加轻松:)

此外,在 Lauren 的帖子中,source_function她在里面加载了一个./srtm_bayarea.asc文件。那个 .asc 文件是什么样的?比方说,存储在 pgsql 数据库中的数据如何生成类似的文件?我们可以使用其他格式,比如 GeoJSON 吗?

那么,当她使用and之类的segment_function东西时,那些是指存储在 asc 文件中的原始数据吗?或者该文件是否被处理成某种标准来映射所有内容以符合它?source.lontarget.lat

如您所见,我在路由和一般的 GIS 方面完全是新手,但我很想了解更多关于围绕 OSRM 生态系统的标准和工具的信息。你能和我分享一些技巧吗?

4

1 回答 1

5

我想我明白了主要的想法,每一种方式(或节点?)都被输送到几个函数中,这些函数加在一起,得分该路径有多好。

对,每条路每个节点都在从 OSM 转储中读取时进行评分,以确定节点的通行性和路的速度(用作评分启发式)。

可以在此处找到数据格式的基本描述。在读取时,ArcInfo ASCII 网格中立即可用的数据包括SRTM 数据。目前纯文本 ASCII 网格是唯一支持的格式。有几个很棒的 Python 工具可供 GIS 开发人员使用,它们可能有助于将其他数据类型转换为 ASCII 网格 -例如,请查看 rasterio。这是一个非常简单的 Python 脚本示例,用于将 NED IMG 转换为 ASCII 网格:

import sys
import rasterio as rio
import numpy as np

args = sys.argv[1:]

with rio.drivers():
    with rio.open(args[0]) as src:
        elev = src.read()[0]
        profile = src.profile

    def shortify(x):
        if x == profile['nodata']:
            return -9999
        elif x == np.finfo(x).tiny:
            return 0
        else:
            return int(round(x))

    out_elev = [map(shortify, row) for row in elev]

    with open(args[0] + '.asc', 'a') as dst:
        np.savetxt(dst, np.array(out_elev),fmt="%s",delimiter=" ")

source.lontarget.lat例如:和是提取过程source作为参数提供的节点。它们的坐标用于在提取过程中查找每个位置的数据。target

确保通读相关的 wiki 页面(已链接)。

随意在 https://github.com/Project-OSRM/osrm-backend/issues中打开一个带有 OSRM 问题的 Github 问题。

于 2015-11-08T19:12:09.087 回答