OSRM使用一些数据文件来存储路网图和相关的元数据。以下是常用的OSRM数据文件以及它们的格式:
├── taiwan-latest.osm.pbf
├── taiwan-latest.osrm.cnbg
├── taiwan-latest.osrm.cnbg_to_ebg
├── taiwan-latest.osrm.datasource_names
├── taiwan-latest.osrm.ebg
├── taiwan-latest.osrm.ebg_nodes
├── taiwan-latest.osrm.edges
├── taiwan-latest.osrm.enw
├── taiwan-latest.osrm.fileIndex
├── taiwan-latest.osrm.geometry
├── taiwan-latest.osrm.hsgr
├── taiwan-latest.osrm.icd
├── taiwan-latest.osrm.maneuver_overrides
├── taiwan-latest.osrm.names
├── taiwan-latest.osrm.nbg_nodes
├── taiwan-latest.osrm.properties
├── taiwan-latest.osrm.ramIndex
├── taiwan-latest.osrm.restrictions
├── taiwan-latest.osrm.timestamp
├── taiwan-latest.osrm.tld
├── taiwan-latest.osrm.tls
├── taiwan-latest.osrm.turn_duration_penalties
├── taiwan-latest.osrm.turn_penalties_index
└── taiwan-latest.osrm.turn_weight_penalties
.osm.pbf 文件
这是一个基于 Protocol Buffers 的文件格式,可以存储 OpenStreetMap(OSM)的道路网络数据。这里的“pbf”代表Protocol Buffers格式。.osm.pbf
文件可以从OSM下载,并通过osrm-extract命令行工具转换为OSRM构建所需的`.osrm'文件。在OSM中,.osm.pbf(Protocol Buffers格式)文件包含了完整的地图数据,例如道路、定位点以及建筑物等,OSRM使用融合和过滤等算法提取这些数据。这种方式确保了处理数据的时有效而且效率更高,同时这种方式也使得OSRM支持更多的数据源。
.osrm 路网文件
.osrm 文件是OSRM使用的主要数据文件,其中存储了刚刚从.osm.pbf文件中提取的路网数据。.osrm文件主要分为两个部分,道路元数据和路缘信息(这些数据来源于.osrm.hsgr文件)。道路元数据中包括道路的长度、速度、例如 U-turns 或者 海拔变化(用于计算路程成本等)。路口信息和其他元数据用于处理路线,例如从一条道路转换到其他道路的花费成本。
.osrm.hsgr 超级图文件
.osrm.hsgr 文件是OSRM的另一个数据文件,其中包含了超级图,这个超级图比路网图要少得多,但却保留了高速公路、跨越城市的公路和其他网络关键信息,可以加速路线查找。.osrm.hsgr 文件中包括路网中所有边的信息--起始点、终止点、路况等 -- 和超级边的信息。
.osrm.hsgr 是二进制文件,其结构体定义如下:
struct HSGRHeader {
uint32_t checksum; // 数据校验和
uint32_t timestamp_ns; // 时间戳(纳秒)
};
struct HSGRDirectory {
uint32_t num_ranges; // 数据段数量
uint32_t num_nodes; // 节点数量
uint32_t check_sum; // 校验和(由数据段的校验和计算得出)
};
struct HSGRRange {
uint32_t start; // 起始节点编号
uint32_t end; // 终止节点编号
uint32_t checksum; // 数据段校验和
};
// 高速路图边的信息
struct HSGREdge {
uint32_t source; // 起始点标识符
uint32_t target; // 终止点标识符
uint32_t weight; // 边的权重(距离)
uint32_t distance; // 边的长度
uint32_t shortcut; // 0:非捷径边,1:捷径边
};
// 前向搜索信息的顶点信息
struct HSGRNode {
uint32_t offset; // 相对地址
uint32_t num_edges; // 前向搜索边数目
uint32_t shortcut; // 在捷径上,0:不是捷径点,1:源点,2:目标点,3:源点和目标点
uint32_t coord; // 坐标值(单位为0.0001度)
};
其中,HSGRHeader 结构体定义了高速路图数据的头部信息,包括数据的校验和和时间戳;HSGRDirectory 结构体定义了高速路图数据中每个数据段的信息,包括数据段数量、节点数量和校验和;HSGRRange 结构体定义了每个数据段所包含的节点范围和数据段校验和;HSGREdge 结构体定义了高速路图中每条边的信息,包括起始点、终止点、边的权重和长度以及是否是捷径边等;HSGRNode 结构体定义了前向搜索信息中每个顶点的信息,包括相对地址、前向搜索边数目、是否在捷径上以及坐标值等。
这些结构体给予了我们对 .osrm.hsgr 数据文件的更深层次的了解,便于对数据的理解和应用。
.osrm.timestamp 文件
.osrm.timestamp 文件包含生成.osrm 和 .osrm.hsgr两个文件的时间戳,所以当文件发生变化时可以更新它们。
.osrm.names 文件
.osrm.names 文件包含路网上每个节点的名称信息,例如道路名称、地点等。这些信息可以用于语音提示或出行建议等应用场合。
.osrm.nodes 文件
.osrm.nodes 文件是一个二进制文件,用于存储路网图上的所有节点,保存了所有路网节点的ID和经纬度坐标。