this Mapbox blog post 和 Lauren Budorick 分享了他们如何与 OSRM 一起使用路线引擎,该引擎使用海拔数据为骑车人提供更好的路线......太棒了!
我还想在插入外部(用户生成的)数据时探索 OSRM 路由的潜力,但我仍然很难掌握 OSRM 的配置文件是如何工作的。我想我明白了主要思想,即每条路(或节点?)都通过管道传输到一些函数中,这些函数加在一起,对这条路径的好坏进行了评分。
但就是这样,我脑子里还有很多缺失的部分,比如 Lauren 在她的个人资料中使用的每个功能都做了什么。如果有人能告诉我一些关于所有这些如何运作的更详细的信息,你会让我下周变得容易得多:)
此外,在 Lauren 的帖子中,她在 source_function
中加载了一个 ./srtm_bayarea.asc
文件。 .asc 文件是什么样的?如何从存储在 pgsql 数据库中的数据生成这样的文件?我们可以使用其他格式吗,比如 GeoJSON?
那么,当她在 segment_function
中使用 source.lon
和 target.lat
之类的东西时,那些是指存储在 asc 文件中的原始数据吗?或者该文件是否被处理成某种标准来映射所有内容以符合它?
正如您所看到的,我是一个完整的路由新手,也许是一般的 GIS,但我很想更多地了解这个围绕 OSRM 生态系统的标准和工具。你能和我分享一些技巧吗?
最佳答案
是的,每条路和每一个节点都被计入 as they are read from an OSM dump 以确定节点的可通过性和一条路的速度(用作评分启发式)。
数据格式的基本描述可以在 here 中找到。在读取时,ArcInfo ASCII 网格中立即可用的数据包括 SRTM data 。目前纯文本 ASCII 网格是唯一支持的格式。有几个适用于 GIS 开发人员的出色 Python 工具可能有助于将其他数据类型转换为 ASCII 网格 - 例如 check out rasterio 。这是一个将 NED IMG 转换为 ASCII 网格的非常简单的 Python 脚本示例:
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.lon
和 target.lat
例如:source
和 target
是由 extraction process 作为参数提供的节点。它们的坐标用于在提取期间在 each location 处查找数据。请务必通读相关维基页面(已链接)。
关于lua - 如何在 OSRM 配置文件中使用外部数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33594766/