OSRM使用一些數(shù)據(jù)文件來存儲(chǔ)路網(wǎng)圖和相關(guān)的元數(shù)據(jù)傲茄。以下是常用的OSRM數(shù)據(jù)文件以及它們的格式:
├── 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 文件
這是一個(gè)基于 Protocol Buffers 的文件格式,可以存儲(chǔ) OpenStreetMap(OSM)的道路網(wǎng)絡(luò)數(shù)據(jù)。這里的“pbf”代表Protocol Buffers格式淋硝。.osm.pbf
文件可以從OSM下載,并通過osrm-extract命令行工具轉(zhuǎn)換為OSRM構(gòu)建所需的`.osrm'文件涤垫。在OSM中谤狡,.osm.pbf(Protocol Buffers格式)文件包含了完整的地圖數(shù)據(jù),例如道路茎毁、定位點(diǎn)以及建筑物等克懊,OSRM使用融合和過濾等算法提取這些數(shù)據(jù)。這種方式確保了處理數(shù)據(jù)的時(shí)有效而且效率更高七蜘,同時(shí)這種方式也使得OSRM支持更多的數(shù)據(jù)源谭溉。
.osrm 路網(wǎng)文件
.osrm 文件是OSRM使用的主要數(shù)據(jù)文件,其中存儲(chǔ)了剛剛從.osm.pbf文件中提取的路網(wǎng)數(shù)據(jù)橡卤。.osrm文件主要分為兩個(gè)部分扮念,道路元數(shù)據(jù)和路緣信息(這些數(shù)據(jù)來源于.osrm.hsgr文件)。道路元數(shù)據(jù)中包括道路的長(zhǎng)度碧库、速度柜与、例如 U-turns 或者 海拔變化(用于計(jì)算路程成本等)巧勤。路口信息和其他元數(shù)據(jù)用于處理路線,例如從一條道路轉(zhuǎn)換到其他道路的花費(fèi)成本弄匕。
.osrm.hsgr 超級(jí)圖文件
.osrm.hsgr 文件是OSRM的另一個(gè)數(shù)據(jù)文件颅悉,其中包含了超級(jí)圖,這個(gè)超級(jí)圖比路網(wǎng)圖要少得多迁匠,但卻保留了高速公路签舞、跨越城市的公路和其他網(wǎng)絡(luò)關(guān)鍵信息,可以加速路線查找柒瓣。.osrm.hsgr 文件中包括路網(wǎng)中所有邊的信息--起始點(diǎn)、終止點(diǎn)吠架、路況等 -- 和超級(jí)邊的信息芙贫。
.osrm.hsgr 是二進(jìn)制文件,其結(jié)構(gòu)體定義如下:
struct HSGRHeader {
uint32_t checksum; // 數(shù)據(jù)校驗(yàn)和
uint32_t timestamp_ns; // 時(shí)間戳(納秒)
};
struct HSGRDirectory {
uint32_t num_ranges; // 數(shù)據(jù)段數(shù)量
uint32_t num_nodes; // 節(jié)點(diǎn)數(shù)量
uint32_t check_sum; // 校驗(yàn)和(由數(shù)據(jù)段的校驗(yàn)和計(jì)算得出)
};
struct HSGRRange {
uint32_t start; // 起始節(jié)點(diǎn)編號(hào)
uint32_t end; // 終止節(jié)點(diǎn)編號(hào)
uint32_t checksum; // 數(shù)據(jù)段校驗(yàn)和
};
// 高速路圖邊的信息
struct HSGREdge {
uint32_t source; // 起始點(diǎn)標(biāo)識(shí)符
uint32_t target; // 終止點(diǎn)標(biāo)識(shí)符
uint32_t weight; // 邊的權(quán)重(距離)
uint32_t distance; // 邊的長(zhǎng)度
uint32_t shortcut; // 0:非捷徑邊傍药,1:捷徑邊
};
// 前向搜索信息的頂點(diǎn)信息
struct HSGRNode {
uint32_t offset; // 相對(duì)地址
uint32_t num_edges; // 前向搜索邊數(shù)目
uint32_t shortcut; // 在捷徑上磺平,0:不是捷徑點(diǎn),1:源點(diǎn)拐辽,2:目標(biāo)點(diǎn)拣挪,3:源點(diǎn)和目標(biāo)點(diǎn)
uint32_t coord; // 坐標(biāo)值(單位為0.0001度)
};
其中,HSGRHeader 結(jié)構(gòu)體定義了高速路圖數(shù)據(jù)的頭部信息俱诸,包括數(shù)據(jù)的校驗(yàn)和和時(shí)間戳菠劝;HSGRDirectory 結(jié)構(gòu)體定義了高速路圖數(shù)據(jù)中每個(gè)數(shù)據(jù)段的信息,包括數(shù)據(jù)段數(shù)量睁搭、節(jié)點(diǎn)數(shù)量和校驗(yàn)和赶诊;HSGRRange 結(jié)構(gòu)體定義了每個(gè)數(shù)據(jù)段所包含的節(jié)點(diǎn)范圍和數(shù)據(jù)段校驗(yàn)和;HSGREdge 結(jié)構(gòu)體定義了高速路圖中每條邊的信息园骆,包括起始點(diǎn)舔痪、終止點(diǎn)、邊的權(quán)重和長(zhǎng)度以及是否是捷徑邊等锌唾;HSGRNode 結(jié)構(gòu)體定義了前向搜索信息中每個(gè)頂點(diǎn)的信息锄码,包括相對(duì)地址、前向搜索邊數(shù)目晌涕、是否在捷徑上以及坐標(biāo)值等滋捶。
這些結(jié)構(gòu)體給予了我們對(duì) .osrm.hsgr 數(shù)據(jù)文件的更深層次的了解,便于對(duì)數(shù)據(jù)的理解和應(yīng)用渐排。
.osrm.timestamp 文件
.osrm.timestamp 文件包含生成.osrm 和 .osrm.hsgr兩個(gè)文件的時(shí)間戳,所以當(dāng)文件發(fā)生變化時(shí)可以更新它們驯耻。
.osrm.names 文件
.osrm.names 文件包含路網(wǎng)上每個(gè)節(jié)點(diǎn)的名稱信息亲族,例如道路名稱、地點(diǎn)等霎迫。這些信息可以用于語音提示或出行建議等應(yīng)用場(chǎng)合。
.osrm.nodes 文件
.osrm.nodes 文件是一個(gè)二進(jìn)制文件知给,用于存儲(chǔ)路網(wǎng)圖上的所有節(jié)點(diǎn)瓤帚,保存了所有路網(wǎng)節(jié)點(diǎn)的ID和經(jīng)緯度坐標(biāo)涩赢。