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面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

Modbus初学者教程,第三章:modbus寄存器说明

第三章:modbus寄存器说明 寄存器种类 Modbus协议中一个重要的概念是寄存器,所有的数据均存放于寄存器中。Modbus寄存器是指一块内存区域。Modbus寄存器根据存放的数据类型以及各自读写特性,将寄存器分为4个部分,这4个部分可以连续也可以不连续,由开发者决定。寄存器的意义如下表所示。 Modbus协议定义了设备间的数据传输方式,包括数据格式和通信规则。Modbus寄存器是协议中用

【经典算法】LeetCode 22括号生成(Java/C/Python3/Go实现含注释说明,中等)

作者主页: 🔗进朱者赤的博客 精选专栏:🔗经典算法 作者简介:阿里非典型程序员一枚 ,记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法(公众号同名) ❤️觉得文章还不错的话欢迎大家点赞👍➕收藏⭐️➕评论,💬支持博主,记得点个大大的关注,持续更新🤞 ————————————————- 首先,请注意题目链接有误,您提供的链接是LeetCode 14,但题目

详细解析MATLAB和Simulink中的文件格式:mat, mdl, mexw32, 和 m 文件

matlab 探索MATLAB和Simulink中的文件格式:MAT, MDL, MEXW32, 和 M 文件**MAT 文件 (.mat)****MDL 文件 (.mdl)****MEX 文件 (.mexw32/.mexw64)****M 文件 (.m)****总结** 探索MATLAB和Simulink中的文件格式:MAT, MDL, MEXW32, 和 M 文

DB2日期格式转换的函数及说明

--当前日期+20天。 cast(replace(varchar(CURRENT timeSTAMP +20 days)  ,'-','')as varchar(8))   --获取当前日期: select current date from sysibm.sysdummy1;  values current date; --获取当前日期  select cur

Ubuntu iso 镜像下载 步骤截图说明

Ubuntu镜像下载,在这个网址: Enterprise Open Source and Linux | Ubuntu 步骤如下图所示: 1、登入网址 2、点击Get Ubuntu 3、点击Download Ubuntu Desktop 后续点击Downloadload 24.04 LTS直接下载就行 如果需要下载其它版本,点击check out our alternative

Java面试题:通过实例说明工厂模式和抽象工厂模式的用法,以及它们在解耦中的作用

工厂模式和抽象工厂模式是创建型设计模式中的两种,主要用于对象的创建,并且通过将对象的创建过程封装起来,来实现代码的解耦和灵活性。下面通过具体实例来说明这两种模式的用法及其在解耦中的作用。 工厂模式(Factory Method Pattern) 工厂模式通过定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 实例说明 假设我们有一个交通工具接口 Veh

全面国产化信创适配改造方案说明

一、概叙         系统的全面国产化适配改造需要从多个方面进行考虑,改造前需要进行充分的论证,在满足具体业务场景的前提下,以确保系统的稳定性和安全性,同时还要考虑技术的发展,不断优化和更新。因此全面国产化适配改造也面临很多挑战和问题,这里只是对适配改造做一个说明参考。 二、改造目标         1.政治任务:79号文件,或者甲方要求。         2.国产化:系统安全可控

音视频开发29 FFmpeg 音频编码- 流程以及重要API,该章节使用AAC编码说明

此章节的一些参数,需要先掌握aac的一些基本知识:​​​​​​aac音视频开发13 FFmpeg 音频 --- 常用音频格式AAC,AAC编码器, AAC ADTS格式 。_ffmpeg aac data数据格式-CSDN博客 目的: 从本地⽂件读取PCM数据进⾏AAC格式编码,然后将编码后的AAC数据存储到本地⽂件。 流程: 关键函数说明: avcodec_fin