我还想在插入外部(用户生成的)数据时探索OSRM路由的潜力,但我仍然很难掌握OSRM配置文件的工作原理.我认为我得到了一个主要的想法,即每一种方式(或节点?)都通过管道传输到一些功能中,而这些功能一直都很好地分析了这条路是多么好.
但就是这样,我脑子里有很多缺失的部分,就像Lauren在她的个人资料中使用的每个功能一样.如果有人能指出一些关于如何运作的更详细的信息,你会让我的下周更加容易:)
此外,在Lauren的帖子中,在source_function内部,她加载了一个./srtm_bayarea.asc文件.那个.asc文件是什么样的?如何生成一个文件,例如,存储在pgsql数据库中的数据?我们可以使用其他格式,比如GeoJSON吗?
然后,当在segment_function中使用source.lon和target.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找到数据格式的基本描述.在读取时,ArcInfo ASCII网格中立即可用的数据包括SRTM data.目前,明文ASCII网格是唯一受支持的格式.有一些很棒的Python工具可供GIS开发人员使用,可以帮助将其他数据类型转换为ASCII网格 – 例如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.lon和target.lat例如:source和target是由extraction process作为参数提供的节点.它们的坐标用于在提取期间在each location查找数据.
请务必仔细阅读相关的Wiki页面(已链接).
Feel free alternately to open a Github issue in 07006 with OSRM questions.