如何在 OSRM 配置文件中使用外部数据

How to use external data in an OSRM profile

this Mapbox blog post, Lauren Budorick 分享了他们如何与 OSRM 一起使用路由引擎,该引擎使用高程数据为骑车人提供更好的路线...太棒了!

我还想在插入外部(用户生成的)数据时探索 OSRM 路由的潜力,但我仍然很难掌握 OSRM 的配置文件是如何工作的。我想我明白了主要的想法,即每一种方式(或节点?)都通过管道传输到几个函数中,这些函数一起对这条路径的好坏进行评分。

但仅此而已,我脑子里还有很多遗漏的部分,比如 Lauren 在她的个人资料中使用的每个功能的作用。如果有人可以向我指出有关所有这些工作原理的更详细信息,你会让我的下周变得更加轻松:)

此外,在 Lauren 的 post 中,她在 source_function 中加载了一个 ./srtm_bayarea.asc 文件。该 .asc 文件是什么样的?如何从存储在 pgsql 数据库中的数据生成这样的文件?我们可以使用其他格式吗,比如 GeoJSON?

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

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

I think I get the main idea, that every way (or node?) is piped into a few functions that, all toghether, scores how good that path is.

是的,每条路 每个节点都被评分 as they are read from an OSM dump 以确定节点的可通过性和一条路的速度(用作评分启发式)。

可以找到数据格式的基本描述 here. As it reads, data immediately available in ArcInfo ASCII grids includes SRTM data. Currently plaintext ASCII grids are the only supported format. There are several great Python tools for GIS developers that may help in converting other data types to ASCII grids - check out 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 例如:sourcetargetextraction process. Their coordinates are used to look up data at each location 在提取期间作为参数提供的节点。

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

Feel free alternately to open a Github issue in https://github.com/Project-OSRM/osrm-backend/issues with OSRM questions.