【MBtiles数据格式说明】GeoServer改造Springboot番外系列一

一、MBTiles数据格式

MBTiles格式是指由MapBox制定的一种将瓦片地图数据存储到SQLite数据库中并可快速使用、管理和分享的规范,是一种用于即时使用和高效传输的规范。MBTiles既可以用作栅格输入数据存储,也可以用作WMSGetMap输出格式。规范有1.0,1.1,1.2,1.3现在最新执行的是1.3标准。

MBTiles 格式的瓦片要求瓦片的地图坐标系统为:Web Mercator,即 PCS_WGS_1984_WORLD_MERCATOR ,EPSG Code:3857。MBTiles 规范按照 OSGeo 的 TMS 规范来生成和组织地图瓦片,仅支持 Web Mercator 坐标系下的固定比例尺集合。如表1所示,这种比例尺定义的初始化显示级别0中包含了1张覆盖全球的256*256大小的切片,并且定义原点坐标为(-20037508.34,-20037508.34),即全球范围的左下角。MBTiles 格式的地图瓦片,支持的图片存储类型为 PNG 和 JPG。

  1. 遵循TMS规范。即原点坐标为左下角,向北,向东增长。
  2. 只支持WebMercator投影(EPSG:3857或EPSG:900913)。
  3. 瓦片尺寸为256X256。支持格式:pbf、jpg、png、webp(MBTiles1.3标准)。
  4. 通过建立视图,减少重复瓦片的存储,减少数据大小。
  5. 后缀名为.mbtiles,可以通过一般的SQLite查看器查看,也可通过GIS软件(如GlobalMapper、QGIS(支持矢量的mbtiles))。
  6. 瓦片比例尺固定。

MBTiles存储格式通过元数据表metadata和tiles视图,map数据表,image数据表一起管理地图瓦片数据。其中metadata和tiles是必须包含的表格。

metadata元数据表采用键值对的形式来存储地图瓦片数据的相关设置,包括两个文本类型的表name和value。metadata表必须包含name和format字段。

tiles视图包括所有的瓦片数据和用于定位瓦片数据的一些值。zoom_level、tile_column和tile_row列必须按照瓦片地图服务规范对瓦片的位置进行编码。tile_data列必须包含作为blob的关联瓦片的原始二进制图像或矢量瓦片数据。

地图覆盖大面积的纯蓝色像海洋或空的土地,造成成千上万的重复、冗余的瓦片数据,例如,4/2/8的瓦片在太平洋中间,可能看起来就是一张蓝色图片。虽然它可能是一些处于第3级,但在16级可能存在数以百万计的蓝色图片,他们都完全一样。MBTiles通过视图使用这些冗余瓦片数据可以减少占用的空间,而不是一个单一的、文字表,MBTiles实现者经常把瓦片表分成两种:一个用来存储原始图像和一个存储瓷砖坐标对应那些图片。

表1 MBTiles各显示级别参数列表

显示

级别

地图宽高(像素)

切片数量

地面分辨率

(米/像素)

地图比例尺

(96dpi)

0

256

1

156543.03

1:591657527.591555

1

512

4

78271.517

1:295828763.795777

2

1024

16

39135.758

1:147914381.897889

3

2048

64

19567.879

1:73957190.948944

4

4096

256

9783.9396

1:36978595.474472

5

8192

1024

4891.9698

1:18489297.737236

6

16384

4096

2445.9849

1:9244648.868618

7

32768

16384

1222.9925

1:4622324.434309

8

65536

65536

611.49623

1:2311162.217155

9

131072

262144

305.74811

1:1155581.108577

10

262144

1048576

152.87406

1:577790.554289

11

524288

4194304

76.437028

1:288895.277144

12

1048576

16777216

38.218514

1:144447.638572

13

2097152

67108864

19.109257

1:72223.819286

14

4194304

268435456

9.554629

1:36111.909643

15

8388608

1.074E+09

4.777314

1:18055.954822

16

16777216

4294967296

2.388657

1:9027.977411

17

33554432

17179869184

1.194329

1:4513.988705

18

67108864

68719476736

0.597164

1:2256.994353

19

134217728

274877906944

0.298582

1:1128.497176

20

268435456

1099511627776

0.149291

1:564.248588

21

536870912

4398046511104

0.074646

1:282.124294

22

1073741824

17592186044416

0.037323

1:141.062147

二、MBTiles数据集存储结构设计

GeoServer通过扩展插件可实现MBTiles文件的发布,但是GeoServer只能支持单个MBTiles文件的发布,无法支持全球栅格瓦片数据集的发布。全球栅格瓦片数据量巨大,无法存储在一个MBTiles文件中,需要按照一定组织结构将全球栅格数据分块存储在多个MBTiles文件,因此需要设计一个全球瓦片数据集的存储结构。

MapBox制定的MBTiles格式规范中,没有定义瓦片数据集的存储结构。因此,本项目制定了一个存储全球栅格瓦片数据集的存储结构MBTiles数据集。MBTiles数据集采用分级分块存储结构,默认的投影是WebMercator(EPSG:3857),默认的瓦片编号方式Googletilescheme(原点在左上角,起始级别为0级)。以下是MBTiles数据集组织结构:

Global_Raster_MBTiles/:根文件夹,用于存放所有与全球影像瓦片数据存储相关的文件和文件夹。文件夹名称以区域+数据类型+MBTiles命名。根文件夹下的每个子文件夹代表一个缩放级别(zoom),级别文件夹下是“列号_行号”文件夹该文件夹下是数据库文件,每个mbtiles文件最多存储256*256=65536个瓦片。(因为单个文件大小受系统磁盘限制),数据集从0-8级,每级目录下只有一个0_0_0. mbtiles文件。例如:1\0_0\0_0_0. mbtiles。

|0/:第一个缩放级别文件夹。

0_0/:第1列的第1行文件夹。

z_x_y.mbtiles:mbtiles数据库文件,存储瓦片数据和元数据。

z_x_y.mbtiles:另一个瓦片数据库文件。

...

0_1/:第1列的第2行文件夹。

z_x_y.mbtiles:mbtiles数据库文件,存储瓦片数据和元数据。

z_x_y.mbtiles:另一个瓦片数据库文件。

...

1_0/:第2列的第1行文件夹,以此类推。

1/:第2个缩放级别文件夹,以此类推。

metadata.json:数据集的元数据文件。

2 瓦片数据集目录组织结构

文件存储路径:z(层级)\m(列号)_n(行号)\z(层级)_x(列号)_y(行号).mbtiles

z层级

m

列号

n行号

x

列号

y

行号

瓦片

列数

瓦片

行数

瓦片

总数

文件存储路径

0

0

0

0

0

1

1

1

0\0_0\0_0_0.mbtiles(只有1个文件)

1

0

0

0

0

2

2

4

1\0_0\1_0_0.mbtiles(只有1个文件)

2

0

0

0

0

4

4

16

2\0_0\2_0_0.mbtiles(只有1个文件)

3

0

0

0

0

8

8

64

3\0_0\3_0_0.mbtiles(只有1个文件)

4

0

0

0

0

16

16

256

4\0_0\4_0_0.mbtiles(只有1个文件)

5

0

0

0

0

32

32

1024

5\0_0\5_0_0.mbtiles(只有1个文件)

6

0

0

0

0

64

64

4096

6\0_0\6_0_0.mbtiles(只有1个文件)

7

0

0

0

0

128

128

16384

7\0_0\7_0_0.mbtiles(只有1个文件)

8

0

0

0

0

256

256

65536

8\0_0\8_0_0.mbtiles(只有1个文件)

9

0

0

0-1

0-1

512

512

65536*4

z\m_n\z_x_y.mbtiles等共4个文件

10

0

0

0-3

0-3

1024

1024

65536*16

z\m_n\z_x_y.mbtiles等共16个文件

11

0-1

0-1

0-7

0-7

2048

2048

65536*16*2*2

z\m_n\z_x_y.mbtiles,分为m*n个路径,每个文件夹下16个文件

12

0-3

0-3

0-15

0-15

4096

4096

65536*16*4*4

z\m_n\z_x_y.mbtiles,分为m*n个路径,每个文件夹下16个文件

13

0-7

0-7

0-31

0-31

8192

8192

65536*16*8*8

z\m_n\z_x_y.mbtiles,分为m*n个路径,每个文件夹下16个文件

14

0-15

0-15

0-63

0-63

16384

16384

65536*16*16*16

z\m_n\z_x_y.mbtiles,分为m*n个路径,每个文件夹下16个文件

15

0-31

0-31

0-127

0-127

32768

32768

65536*16*32*32

z\m_n\z_x_y.mbtiles,分为m*n个路径,每个文件夹下16个文件

16

0-63

0-63

0-255

0-255

65536

65536

65536*16*64*64

z\m_n\z_x_y.mbtiles,分为m*n个路径,每个文件夹下16个文件

17

0-127

0-127

0-511

0-511

131072

131072

65536*16*128*128

z\m_n\z_x_y.mbtiles,分为m*n个路径,每个文件夹下16个文件

18

0-255

0-255

0-1023

0-1023

262144

262144

65536*16*256*256

z\m_n\z_x_y.mbtiles,分为m*n个路径,每个文件夹下16个文件

19

0-511

0-511

0-2047

0-2047

524288

524288

65536*16*512*512

z\m_n\z_x_y.mbtiles,分为m*n个路径,每个文件夹下16个文件

表3 metadata元数据

name

value(示例)

说明

name

globleImage

数据集英文名称名称(根文件夹名称)

format

png

瓦片数据的格式:png、jpg 或 pbf。

bounds

-180,-85,180,85

图的切图范围,单位为度。bounds 的格式(逗号分隔数字字符串):左,下,右,上。

center

122.1906,37.7599,11

地图默认视图的经度、纬度和缩放级别。逗号分隔数字字符串)

minzoom

0

图块集为其提供数据的最低缩放级别

maxzoom

18

图块集为其提供数据的最高缩放级别

attribution

(HTML 字符串):一个属性字符串,用于解释 地图的数据和/或样式。

description

描述信息

type

baselayer

地图类型,其值可以是 overlay 或 baselayer。

version

1.3

数据集的版本

EPSG

3857

坐标系的 EPSG Code,EPSG:4326 、EPSG:3857或EPSG:900913

tile_height

256

瓦片高度,通常为256。

tile_width

256

瓦片高度,通常为256。

scheme

tms

瓦片编号规则,tms或xyz

​​​​​​​三、MBTiles数据集展示

1、mbtiles目录

2、metadata.json

{
    "name": "ESRI ArcGIS.Imagery",
    "type": "baselayer",
    "version": "1.2",
    "description": "",
    "format": "jpg",
    "bounds": "-180.00000000,-85.05112878,180.00000000,85.05112878",
    "attribution": "",
    "scheme": "xyz",
    "minzoom": "14",
    "maxzoom": "14",
    "center": "0.00000000, 0.00000000, 14",
    "EPSG": "3785",
    "tile_height": "256",
    "tile_width": "256"
}

3、mbtiles数据查看

mbtiles文件其实就是一个简单的sqlite数据文件,所以可以用navicat、heidisql等数据连接工具打开查看。

每一行数据其实就是一张瓦片图,这样存储的好处是可以突破单文件夹最大文件数的限制。

但是相应也需要有算法去取出逐个对应的z-x-y的图片。

下一篇就讲一下Mbtiles数据文件的解析和提取对应瓦片的算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/364495.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux使用iptables禁用ip

iptables是什么? iptables 是一个强大的开源软件,它是 Linux 系统内核中 netfilter 包过滤框架的一部分,用来实现防火墙功能。iptables 提供了一种灵活的方式来控制和管理进出以及通过 Linux 计算机的网络流量。 前提 我在云服务器上用doc…

物联网可视化平台:赋能企业数字化转型

在数字化转型的大潮中,企业面临着如何更好地理解和利用海量数据的挑战。物联网技术的快速发展,为企业提供了一个全新的视角和解决方案。通过物联网可视化平台,企业能够实时监控、分析和展示物联网数据,从而加速数字化转型的进程。…

前端构建变更:从 webpack 换 vite

现状 这里以一个 op (内部运营管理用)项目为例,从 webpack 构建改为 vite 构建,提高本地开发效率,顺便也加深对 webpack 、 vite 的了解。 vite 是前端构建工具,使用 一系列预配置进行rollup 打包&#x…

【目标检测】对DETR的简单理解

【目标检测】对DETR的简单理解 文章目录 【目标检测】对DETR的简单理解1. Abs2. Intro3. Method3.1 模型结构3.2 Loss 4. Exp5. Discussion5.1 二分匹配5.2 注意力机制5.3 方法存在的问题 6. Conclusion参考 1. Abs 两句话概括: 第一个真正意义上的端到端检测器最…

phpMyAdmin 未授权Getshell

前言 做渗透测试的时候偶然发现,phpmyadmin少见的打法,以下就用靶场进行演示了。 0x01漏洞发现 环境搭建使用metasploitable2,可在网上搜索下载,搭建很简单这里不多说了。 发现phpmyadmin,如果这个时候无法登陆,且也…

ubuntn挂载硬盘为只读问题

做为服务器操作系统,linux是很多站长经常用到的,那么在linux系统下如果需要新增加硬盘,该怎么增加呢?下面就来详细了解一下linux系统下添加新硬盘、分区及挂载硬盘的全过程。没有服务器的朋友可以点击了解一下阿里云1折优惠云服务…

【JS】Express.js环境配置与示例

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Express.js环境配置与示例。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不…

力扣hot100 二叉树的右视图 DFS BFS 层序遍历 递归

Problem: 199. 二叉树的右视图 文章目录 思路&#x1f496; BFS&#x1f496; DFS 思路 &#x1f469;‍&#x1f3eb; 甜姨 &#x1f496; BFS ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( n ) O(n) O(n) class Solution {public List<Integer&…

虹科技术|一文详解IO-Link Wireless技术如何影响工业无线自动化

导读&#xff1a;在工业无线自动化的飞速发展进程中&#xff0c;IO-Link Wireless技术成为了一项具有颠覆性的创新。它将IO-Link协议与无线连接完美结合&#xff0c;解决了传统通信技术在工业应用中的痛点。本文将深入解析IO-Link Wireless技术的原理、应用领域、优势以及实际案…

Docker基础(持续更新中)

# 第1步&#xff0c;去DockerHub查看nginx镜像仓库及相关信息# 第2步&#xff0c;拉取Nginx镜像 docker pull nginx# 第3步&#xff0c;查看镜像 docker images # 结果如下&#xff1a; REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 60…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextPicker组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之TextPicker组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、TextPicker组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不…

【DDD】学习笔记-限界上下文与架构

作为领域驱动战略设计的重要元素&#xff0c;限界上下文对领域驱动架构有着直接的影响。在领域驱动的架构设计过程中&#xff0c;识别限界上下文与上下文映射都是一个重要的过程。限界上下文可以作为逻辑架构与物理架构的参考模型&#xff0c;而上下文映射则非常直观地体现了系…

故障诊断 | 一文解决,CNN-SVM卷积神经网络-支持向量机组合模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,CNN-SVM卷积神经网络-支持向量机组合模型的故障诊断(Matlab) 模型描述 卷积神经网络(Convolutional Neural Network,CNN)和支持向量机(Support Vector Machine,SVM)是两种常用的机器学习算法,它们在不同领域和任务中都表现出…

linux中vim的操作

(码字不易&#xff0c;关注一下吧w~~w) 命令模式&#xff1a; 当我们按下esc键时&#xff0c;我们会进入命令模式&#xff1b;当使用vi打开一个文件时也是进入命令模式。 光标移动&#xff1a; 1 保存退出&#xff1a;ZZ 2 代码格式化&#xff1a;ggG 3 光标移动&#xff…

公共用例库计划--个人版(六)典型Bug页面设计与开发

1、任务概述 本次计划的核心任务是开发一个&#xff0c;个人版的公共用例库&#xff0c;旨在将各系统和各类测试场景下的通用、基础以及关键功能的测试用例进行系统性地归纳整理&#xff0c;并以提高用例的复用率为目标&#xff0c;力求最大限度地减少重复劳动&#xff0c;提升…

【计算机网络】Socket的SO_REUSEADDR选项与TIME_WAIT

SO_REUSEADDR用于设置套接字的地址重用。当一个套接字关闭后&#xff0c;它的端口可能会在一段时间内处于TIME_WAIT状态&#xff0c;此时无法立即再次绑定相同的地址和端口。使用SO_REUSEADDR选项可以允许新的套接字立即绑定到相同的地址和端口&#xff0c;即使之前的套接字仍处…

Python代码重构库之rope使用详解

概要 Python是一门强大的编程语言,但在大型项目中,维护和重构代码可能会变得复杂和困难。为了提高开发人员的效率和准确性,有许多工具可用于辅助代码重构和智能代码补全。其中之一是Python Rope。 Python Rope是一个用于Python编程语言的强大工具,它提供了丰富的功能,包…

C++模板(下)

【C修炼秘籍】模板&#xff08;下&#xff09; &#x1f338;心有所向&#xff0c;日复一日&#xff0c;必有精进 &#x1f338;专栏《C修炼秘籍》 &#x1f338;作者&#xff1a;早凉 目录 【C修炼秘籍】模板&#xff08;下&#xff09; 文章目录 前言 一、非类型的模板参…

[C#][opencvsharp]opencvsharp sift和surf特征点匹配

SIFT特征和SURF特征比较 SIFT特征基本介绍 SIFT(Scale-Invariant Feature Transform)特征检测关键特征&#xff1a; 建立尺度空间&#xff0c;寻找极值关键点定位&#xff08;寻找关键点准确位置与删除弱边缘&#xff09;关键点方向指定关键点描述子 建立尺度空间&#xff0…

谈谈BlueFS

目录 前言数据结构标识一个文件文件系统的全局记录事务记录超级块 启动流程磁盘管理读写流程创建文件流程为文件写数据把数据下刷到磁盘读流程 参考资料 前言 BlueFS具体是个什么东西呢&#xff1f; 如上图&#xff0c;在Ceph里&#xff0c;使用BlueStore作为默认的存储引擎。…