GIS:MBTiles数据

# MBTiles

    MBTiles是指由MapBox制定的一种将瓦片地图数据存储到SQLite数据库中并可快速使用,管理和分享的规范。它使得数以百万的瓦片数据存储在一个文件中,而且SQLite数据库支持多种平台,所以使用MBTiles在移动设备上浏览瓦片数据是比较理想的方式。

    MBTiles 既可以用作栅格输入数据存储,也可以用作WMS GetMap 输出格式。

    MBTiles 单个文件比较容易迁移,搜索效率也更高(透过数据库索引的方式提高瓦片索引的效率)。

  ## 特点

  1. 遵循 TMS 规范。即原点坐标为左下角,向北,向东增长。
  2. 只支持 Web Mercator 投影(EPSG:3857 或 EPSG:900913)。
  3. 瓦片尺寸为 256 X 256。支持格式:pbfjpgpngwebp或其他格式的 IETF 媒体类型MBTiles 1.3标准
  4. 通过建立视图,减少重复瓦片的存储,减少数据大小。
  5. 后缀名为.mbtiles,可以通过一般的 SQLite 查看器查看,也可通过GIS软件(如GlobalMapper、QGIS(支持矢量的mbtiles))。
  6. 瓦片比例尺固定。参照下表。

    💡 MBTiles原则上仅支持Web墨卡托投影,但如果一定要存储WGS84坐标系的地图瓦片,在GlobalMapper、QGIS中一样可以打开,只是在显示地图时会动态投影为Web墨卡托 [来源]

  📌 MBTiles Specification

  📌 mbtiles wms输出格式

  📌 MBTiles栅格和矢量数据存储

# SQLite中的MBTiles

  ## 一、原理

        MBTiles格式的地图瓦片是通过元数据表Metadata(必需)和tiles视图(必需),map数据表images数据表一起管理地图瓦片数据。
        Metadata元数据表是采用键值对的形式来存储地图瓦片数据的相关设置,如瓦片名称、版本号、地理范围、坐标系等。

        map数据表包含了用于定位瓦片数据的值和瓦片id

        images数据表包含瓦片id和瓦片数据。

        tiles视图包括所有的瓦片数据和用于定位瓦片数据的一些值,MBTiles 通过拆分瓦片索引和瓦片原始图像的存储,使用视图的方式来关联二者,这样成千上万的瓦片索引就可以指向同一个瓦片图像,从而大大减少纯色瓦片的冗余存储,提升磁盘利用率以及瓦片检索效率。

wp4.png

  ## 二、案例

  在SQLite中导入一个mbtiles文件,各表情况如图所示:

map表
images表
tiles 视图

   该数据中共有2688张图片,map表有2688行,images表有1411行,tiles视图有2688行(即颜色完全相同的瓦片只存储一次,避免数据的冗余存储

   MBTiles通过新建视图表的方法,在不影响地图瓦片显示效果的前提下,有效地解决了数据的冗余存储问题。

# 数据生成

## 一、QGIS

  用途:影像 / 矢量 数据 → 散列式文件、mbtiles(pbf / png / jpg) 

        注:矢量数据——pbf(可以通过栅格工具切成png、jpg);影像数据——png、jpg;

## 二、tippecanoe

  用途:矢量数据 → 散列式文件、mbtiles

  GitHub:GitHub - mapbox/tippecanoe

  输入数据格式:GeoJSON、Geobuf 或 CSV

Windows 安装教程:windows下使用tippecanoe把GeoJSON制作成矢量切片vectortile

## 三、MBUtil

  用途:散列式文件 ⇋ mbtiles

  mapbox的mbutil 支持把本地散列式瓦片打包为 mbtiles 格式(反过来也可以)。

        Step 1:下载 GitHub - mapbox/mbutil: Importer and Exporter of MBTiles

        Step 2:cmd进入文件夹,安装 python setup.py install

        Step 3:在该文件夹下使用命令

# 散列式文件 → mbtiles (指定不存在的文件路径 D:\mbtiles\MyTileData.mbtiles
python mb-util D:\MyTileData\ D:\mbtiles\MyTileData.mbtiles

# mbtiles → 散列式文件(指定不存在的文件夹路径 D:\newTileData\
python mb-util D:\mbtiles\MyTileData.mbtiles D:\newTileData\

        命令的参数选项:

Options:
  -h, --help            Show this help message and exit
  --scheme=SCHEME       Tiling scheme of the tiles. Default is "xyz" (z/x/y),
                        other options are "tms" which is also z/x/y
                        but uses a flipped y coordinate, and "wms" which replicates
                        the MapServer WMS TileCache directory structure "z/000/000/x/000/000/y.png"''',
                        and "zyx" which is the format vips dzsave --layout google uses.
  --image_format=FORMAT
                        The format of the image tiles, either png, jpg, webp or pbf
  --grid_callback=CALLBACK
                        Option to control JSONP callback for UTFGrid tiles. If
                        grids are not used as JSONP, you can
                        remove callbacks specifying --grid_callback=""
  --do_compression      Do mbtiles compression
  --silent              Dictate whether the operations should run silently

         注:默认未压缩,如果数据中有较多同样的冗余图片,使用压缩才有用。

   教程:MBUtil实现mbtiles文件和地图切片之间的格式转换

# 发布

## 一、GeoServer

  用途:发布 矢量/ 栅格 mbtiles

   所需安装插件: 1、WPS插件;     2、MBTiles插件

  1️⃣ WPS插件

    下载地址:http://geoserver.org/release/2.20.0/ (根据版本号修改url即可

  将下载后的jar包放入/webapps/geoserver/WEB-INF/lib(有重复的文件选择跳过),重启geoserver即可

  2️⃣ MBTiles插件

    下载地址:https://build.geoserver.org/geoserver/(选择相应版本后进入community文件夹

    注:该网站现在只提供 2.18.x —— 2.23.x

   (1)如果只是想读取MBTiles文件,则下载 mbtiles-store-plugin;

   (2)如果还想使用WMS输出MBTiles格式,则下载 mbtiles-plugin ;(注:请确保在安装此插件之前为GeoServer实例安装相应的WPS扩展,否则GeoServer将不会启动

    Linux数据绝对/相对路径:file:///home/mydata/xxx.mbtiles  或 file:data/xxx.mbtiles

    Windows数据绝对/相对路径:file:W:\mydata\xxx.mbtiles  或 file:data/xxx.mbtiles

其它

        注意:在使用wms访问发布的mbtiles数据时,在缩放等级比较高,范围比较大的情况下,Geoserver不会返回数据,应该是内部有处理切片数量的显示 [链接]

## 二、mbtiles-server(by DenisCarriere)

  用途:发布 mbtiles(png / jpg / pbf)

        GitHub:https://github.com/DenisCarriere/mbtiles-server​

        示例:分享开源nodejs版mbtiles-server

        Step 1:以管理员方式进行cmd,运行 npm install -g mbtiles-server  [链接](nodejs版本:8.x

        Step 2:运行命令( --verbose 表示可以在控制台看到执行结果

# 注:只能获取F:\mbtiles文件夹下的mbtiles,无法获取其下子文件夹的mbtiles
mbtiles-server --cache F:\mbtiles --port 6677 --verbose

        启动后,可在浏览器输入 http://localhost:6677/ 

          Step 3:前端访问路径

http://localhost:6677/data1/{z}/{x}/{y}.png
http://localhost:6677/data1/{z}/{x}/{y}

        注:使用cesium能加载png格式的、但jpg似乎有点问题; 

        教程:分享开源nodejs版mbtiles-server

        教程:栅格瓦片转mbtiles文件离线部署_栅格转mbtile

## 三、mbtiles-server(by chelm)

  用途:发布 mbtiles(仅png格式)

        GitHub: https://github.com/chelm/mbtiles-server

        示例:mbtiles-server将mbtiles或地图切片发布成地图服务

        Step 1:下载解压包,以管理员方式打开cmd,运行 npm install(nodejs版本:8.x

        Step 2:cmd 运行命令

# 似乎不支持绝对路径,只支持发布一个mbtiles
node server.js ./myTestData.mbtiles 6677

         Step 3:前端访问路径

http://localhost:6677/{z}/{x}/{y}.png

## 四、TileServer GL

        GitHub:GitHub - maptiler/tileserver-gl

# 客户端调用

  ## 一、leaflet

        leaflet提供了专门在客户端打开mbtiles的引用库

        代码参考:Leaflet加载MBTiles离线瓦片数据_做GIS梦的人-CSDN博客

  ## 二、openlayers

        以WMTS、TMS服务形式调用,可参考:OpenLayers:加载GeoServer发布的WMTS、TMS服务

  ## 三、cesium

        以WMTS、TMS、WMS等服务形式调用

/* Geoserver发布,以WMTS形式加载*/
const matrixIds = new Array(19);
for (let z = 0; z < 19; ++z) {
    matrixIds[z] = "EPSG:900913:" + z;
}

let wmtsImageryProvider = viewer.imageryLayers.addImageryProvider(
  new Cesium.WebMapTileServiceImageryProvider({
    url : 'http://localhost:8080/geoserver/gwc/service/wmts',
    layer : 'workSpace:tianhe',
    style : 'raster',
    format : 'image/png',
    tileMatrixSetID : 'EPSG:900913',
    tileMatrixLabels : matrixIds
  })
);
/*  Geoserver发布,以TMS形式加载 */
let tmsLayer = viewer.imageryLayers.addImageryProvider(
    new Cesium.TileMapServiceImageryProvider({
        url : 'http://localhost:8080/geoserver/gwc/service/tms/1.0.0/workSpace:tianhe@EPSG:900913@png'
    })
);

        链接:Cesium入门(五):加载WMTS瓦片地图服务

SMTiles格式数据

  由于MBTiles格式数据限制性较多,超图推出了一种MBTiles的扩展格式SMTiles,下面是SMTilesMBTiles格式的区别:
(1) SMTiles支持任意坐标系、任意比例尺,切片的起算原点为任意指定点,行列号的方向为原点开始向左下递增;
(2) SMTiles格式的地图瓦片的存储类型不仅支持PNG、JPG,还支持PNG和JPG混合格式的瓦片;

  SMTiles 格式的地图瓦片存储形式 *.smtiles 文件,命名由地图名、Hashcode、瓦片的宽和高、瓦片格式,T(表示透明)及 .smtiles 后缀组成,如:China_69470548_256X256_PNG_T.smtiles,China_69470548_256X256_PNG.smtiles。

  MBTilesSMTiles 格式的地图瓦片的存储机制基本相同,都是通过元数据表”metadata”,和 tiles 视图,map 数据表,image 数据表一起管理地图瓦片数据,仅在 tiles 视图中略有不同。

# 参考

  ## MBTiles介绍

  MBTiles离线包生成和使用_SuperMap技术控-CSDN博客

  瓦片数据MBTiles存储简介_halljoe的博客-CSDN博客

  MBTiles格式学习 · 大专栏

  MBTiles 与 SMTiles 格式的地图瓦片_跃然实验室-CSDN博客

  MBTiles栅格地图瓦片存储规范说明(图文案例说明

  ## GeoServer与MBTiles

  Geoserver发布mbtiles文件_跃然实验室-CSDN博客_geoserver mbtiles

  GeoServer之安装mbtiles插件(reload band definitions

  ## 报错

  BUG GeoServer服务器状态:Could not initialize class sun.awt.X11GraphicsEnvironment

  Solutionhttps://www.cnblogs.com/cuijinlong/p/13426102.html

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当Arc GIS无法加载数据源时,可能存在以下几种原因: 1. 数据源路径错误:首先,我们需要确认数据源的路径是否正确。如果路径错误,Arc GIS将无法找到数据源并加载。可以检查路径中是否存在拼写错误,文件名是否正确,并且确认数据源是否存在于所指定的路径中。 2. 缺少必要的驱动程序:某些数据源需要特定的驱动程序才能被Arc GIS正确加载。如果没有安装或缺少必要的驱动程序,Arc GIS将无法加载数据源。在这种情况下,我们需要下载并安装正确的驱动程序,以确保数据源能够被Arc GIS识别和加载。 3. 数据源格式不受支持:Arc GIS只能加载并处理特定的数据源格式。如果数据源格式不受Arc GIS支持,将无法正确加载数据源。在这种情况下,我们可以尝试将数据源转换为Arc GIS支持的格式,并重新尝试加载。 4. 数据源损坏或损坏:如果数据源文件损坏或损坏,Arc GIS将无法加载。可以尝试使用其他工具(例如数据修复软件)来修复数据源文件,并重新尝试加载。 5. 资源限制:某些情况下,Arc GIS无法加载数据源是因为系统资源不足。可以尝试关闭其他占用资源的应用程序,释放一些系统资源,并重新尝试加载数据源。 总之,当Arc GIS无法加载数据源时,我们需要仔细检查路径、驱动程序、数据源格式和数据源文件的完整性,以及系统资源是否充足,来找到并解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值