java osm pbf_OSM PBF 文件格式说明

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信息,但是不能同时包含两种及以上。

标签:文件,string,bytes,replication,PBF,OSM,文件格式,optional

来源: https://blog.csdn.net/haochajin/article/details/100106807

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值