OSM PBF 文件格式说明

  • Post author:
  • Post category:其他



File Format


一个


pbf


文件通常包括一个文件头和一系列的文件体。这种设计是为了以后文件随机读取,并且跳过不理解或者不需要的数据。


文件格式由以下部分组成:


int4:


以网络字节顺序排列的


BlobHeader


长度


BlobHeader:


定义如下


message BlobHeader {


required string type


=


1


;


类型


optional bytes indexdata


=


2


;


索引信息(


OSM


中为


bounding box




required int32 datasize


=


3


;


Blob


消息的序列化大小


}


Blob


,通过未压缩或者以


zlib/deflat


进行压缩格式,存储数据


blob


信息


message Blob {


optional bytes raw


=


1


;



//




不压缩


optional int32 raw_size


=


2


;



//




压缩时解压大小


optional bytes zlib_data


=


3


;



//




数据压缩版本


optional bytes lzma_data


=


4


;



//LZMA




数据压缩特征


optional bytes OBSOLETE_bzip2_data


=


5


[deprecated


=


true


];



// Don’t reuse this tag number.


}


目前


OSM


数据有两种文件体类型,实际的类型信息存储在


BlobHeader





type


字段中:


OSMHeader


,包含了


HeaderBlock


信息。在首个


OSMData


前,每个文件体必须有这些中的一个。


OSMData


,包含了序列化之后的


PrimitiveBlock


信息,包含了实体信息。


这种设计便于用户根据自己的需要扩展类型信息,解析时应当忽略或者跳过无法识别的类型。


OSMHeader


文件块定义:


message HeaderBlock {


optional HeaderBBox bbox


=


1


;



//bounding box



/*




解析数据集附加标签说明




*/


repeated string required_features


=


4


;


repeated string optional_features


=


5


;


optional string writingprogram


=


16


;


optional string source


=


17


;



// From the bbox field.



/* Tags that allow continuing an Osmosis replication */



// replication timestamp, expressed in seconds since the epoch,



// otherwise the same value as in the “timestamp=…” field



// in the state.txt file used by Osmosis


optional int64 osmosis_replication_timestamp


=


32


;



// replication sequence number (sequenceNumber in state.txt)


optional int64 osmosis_replication_sequence_number


=


33


;



// replication base URL (from Osmosis’ configuration.txt file)


optional string osmosis_replication_base_url


=


34


;


}


为了提供前后兼容性,解析器需要知道文件能否被解析。判断能否被解析是通过


required features


(必须要素)实现的,如果一个文件的必须要素中包含了解析器无法识别字段,则该文件无法解析,返回错误信息,并报告无法解析字段。


目前已定义的要素有:


OsmSchema-V0.6





OSM v0.6


标准的数据


DenseNodes


:文件包含密集节点和密集信息


HistoricalInformation


:文件包含


OSM


历史信息


OSMData


文件块定义:


message PrimitiveBlock {


required StringTable stringtable


=


1


;


repeated PrimitiveGroup primitivegroup


=


2


;


optional int32 granularity


=


17


[



default



=100


];



//




坐标存储精度


optional int64 lat_offset


=


19


[



default



=0


];



//




坐标偏差




.


optional int64 lon_offset


=


20


[



default



=0


];



//




时间精度


optional int32 date_granularity


=


18


[



default



=1000


];



// Proposed extension:



//optional BBox bbox = XX;


}


创建


PBF


文件时,需要提取所有的字符串(


key





value





role





user


)到单独的


string table


中。


一个


PrimitiveGroup


不会包含不同种类的对象。可以包含


Node





DenseNode





Way





Relation





ChangeSet


信息,但是不能同时包含两种及以上。



版权声明:本文为haochajin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。