OSM PBF 文件格式说明

2024-06-02 17:18
文章标签 说明 文件格式 osm pbf

本文主要是介绍OSM PBF 文件格式说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

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

这篇关于OSM PBF 文件格式说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1024597

相关文章

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

在Dockerfile中copy和add的区别及说明

《在Dockerfile中copy和add的区别及说明》COPY和ADD都是Dockerfile中用于文件复制的命令,但COPY仅用于本地文件或目录的复制,不支持自动解压缩;而ADD除了复制本地文件或... 目录在dockerfile中,copy 和 add有什么区别?COPY 命令ADD 命令总结在Doc

解读Pandas和Polars的区别及说明

《解读Pandas和Polars的区别及说明》Pandas和Polars是Python中用于数据处理的两个库,Pandas适用于中小规模数据的快速原型开发和复杂数据操作,而Polars则专注于高效数据... 目录Pandas vs Polars 对比表使用场景对比Pandas 的使用场景Polars 的使用

Spring Boot Actuator使用说明

《SpringBootActuator使用说明》SpringBootActuator是一个用于监控和管理SpringBoot应用程序的强大工具,通过引入依赖并配置,可以启用默认的监控接口,... 目录项目里引入下面这个依赖使用场景总结说明:本文介绍Spring Boot Actuator的使用,关于Spri

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s