gdal2tiles切图_wml00000的博客

发布时间 2023-07-31 09:42:28作者: 游侠舒迟

gdal2tiles切图

文章目录

切图流程

从原始数据获取所需的最高级别的瓦片,更低级的瓦片只需从这些最高级瓦片一层一层生成.

这样速度更快:因为最高级的瓦片只能利用gdal从原始tif中获取,其速度受tif尺寸影响很大,且从tif上取得级别越低,单次所取范围越大,速度也越慢.举个实际的例子,从原始tif上获取某位置17级的瓦片的时间将远远大于从原始tif获取4张对应位置的18级瓦片,并将其合成的时间.

首先会读取元数据中的坐标范围信息,通过坐标范围在全球中的位置关系可以计算出需要生成的图片编号。如下图所示:

在这里插入图片描述

图中的白色实际为透明色,原因是该等级下数据范围只占那么大。

Cesium前端加载逻辑相同,首先获取tilemapresource.xml中的extent,当extent与当前浏览器窗口有交集时才会请求瓦片。

瓦片合并

应用场景:

高分辨率的tif影像数据量高达上百GB,如果直接对其进行切片操作会比较费时,可以先将其分割成多个tif,每个tif分别执行切片操作,最后将瓦片合并到一个文件夹供前端调用。

存在问题:

每个tif切片时都可能会生成同文件夹且同名的瓦片文件,如果直接进行文件夹复制,会导致图像被覆盖,无法展示完整范围的图像。如下图所示:

在这里插入图片描述

正常想要的应该是左下角的效果,但是如果直接用文件夹复制,就会导致最后只保留右侧中的一张图片。

问题解决:

在每个tif生成切片时,直接往同一个文件夹生成,在生成png时先判断如果文件夹名称相同且png名称相同的话,需要执行图片合并操作,将两张图片合并为1张。(gdal2tiles.py中实际上有这部分逻辑,需要在调用命令行时加上重采样参数-r antialias,里面会执行Image.composite方法,但是需要注意每个tif切片时对于tilemapresource.xml的更新需要在源码上修改一下,源码中是直接对tilemapresource.xml进行覆盖,应该是进行比较后动态更新里面的数值)

注:如果涉及到切片合并,需要保证待合成的图像都是在antialias重采样模式下生成的,才能够成功合并,否则可能出现黑图情况。

参考链接

[1]. gdal2tiles.py

[2]. gdal2tiles.py翻译版

[3]. gdal2tiles工具

[4]. How it works(14) GDAL2Tiles源码阅读

本文转自 https://blog.csdn.net/wml00000/article/details/130517935?spm=1001.2014.3001.5502,如有侵权,请联系删除。