前言——GDAL的安装

关于gdal的下载,建议搜索并下载GMT6这个软件包,在bin文件下有gdal所有程序,且较新。

使用gdal生成COG需要用到gdaladdo.exe与gdal_translate.exe

参考网站是wiki的COG简介与部分操作:
https://trac.osgeo.org/gdal/wiki/CloudOptimizedGeoTIFF#NOTE

一、gdaladdo.exe的介绍与使用

gdaladdo.exe 作用是在文件内部生成影像金字塔(概览层),来提高文件浏览和打开速度。我们用它来提前处理geotiff,生成概览层。这一步是生成COG的前提,因为COG内部得有概览层,而输入的geotiff不一定有。故在转换之前得有这一步。

操作如下:
进入gdaladdo所在目录(C:\programs\gmt6\bin)。使用cmd命令调用gdaladdo.exe。
公式如下:

gdaladdo [-r {nearest,average,gauss,cubic,cubicspline,lanczos,average_mp,average_magphase,mode}] 
[-ro] [-clean] filename levels

参数介绍:可参考详细gdaladdo用法说明(建金字塔),这里只做一些关键部分

参数名示意
-r(默认值为最近邻元法nearest),还可以设置成平均值法average,高斯gauss,三次内插法cubic等。
-ro以只读模式打开数据集,以生成外部概览(尤其是GeoTIFF数据集)。
-clean删除所有概览层。
filename输入文件名。
levels要建立略缩图的层号的列表。选择一个缩放水平如 n,则表示略缩图缩放程度是源图像每个维上分辨率的1/n。可以设置多个缩略图,如2 4 8 123 6 9 12 17
如果文件在所选缩放水平上已经存在略缩图,那么那个缩放程度将被重新计算并覆盖写入。

举个例子:
按照上面操作打开cmd命令行后,输入 gdaladdo.exe -r average simple.tif 2 4 8 16 32 (代表以平均值法average,生成zoom级:2 4 8 16 32的内部概览层)

这里说明一下,无论你 input.tif 内部有没有瓦片组织,或者瓦片组织的宽度或高度是多少,都不影响后续使用 gdal_translate.exe 生成COG。因为 gdal_translate.exe 只借用了 Levels 的数值,会根据 新的TileSize 重新生成金字塔

二、gdal_translate.exe的介绍与使用

gdal_translate.exe用来生成COG,使用方法为命令行输入:gdal_translate.exe input.tif output.tif
其中涉及到参数如下所示:

参数名示意
-co TILED=YES生成瓦片
-co COMPRESS=DEFLATE/LZW/JPEG/PACKBITS使用DEFLATE/LZW/JPEG/PACKBITS方法压缩(请注意,虽然 DEFLATE 比 LZW 更有效,但可能会导致与某些软件包的兼容性问题)
-co COPY_SRC_OVERVIEWS=YES从原数据中拷贝概览(需要先进行gdaladdo.exe)
-co BLOCKXSIZE=512/256 -co BLOCKYSIZE=512/256 --config GDAL_TIFF_BLOCKSIZE 512/256生成512x512或者256x256的瓦片

使用时可将上述参数搭配组合使用。如下例子所示:
gdal_translate.exe simple.tif simple_COG_256.tif -co TILED=YES -co BLOCKXSIZE=256 -co BLOCKYSIZE=256 --config GDAL_TIFF_BLOCKSIZE 256 -co COMPRESS=DEFLATE -co COPY_SRC_OVERVIEWS=YES
在这里插入图片描述

gdal_translate.exe的功能十分强大,还可以生成其他格式的文件,参考链接

三、gdal2tiles的介绍与使用

gdal2tiles是gdal提供一个python库。该库可以将输入tif切片换成成标准TMS瓦片(参考博客:TMS瓦片的定义)。

由于是python库,我们在python中使用。
参考博客:
1、python调用gdal2tiles实现栅格影像TMS切片
2、python gdal2tiles 包
使用方法如下:

import time
from osgeo import gdal
import gdal2tiles
if __name__ == '__main__':
    start = time.process_time()
    options = {'tilesize': 256, 'zoom': (9, 12)}  # 'np_processes': 2
    gdal2tiles.generate_tiles('D:/code/testdata/TMS/simple.tif', 'D:/code/testdata/TMS/TMS_Overview/', **options)
    end = time.process_time()
    print('Running time: %s Seconds' % (end - start))

options是其参数设置项,详见1、python调用gdal2tiles实现栅格影像TMS切片

最终结果如下:

点击其中生成的利用leaflet的预览文件 leaflet.html ,记得勾选切片结果(Layer),运行效果如下图所示:
在这里插入图片描述

接续前面文章《》,本文介绍另外一种切片工具gdal2tiels。通常遥感影像数据非常大,要在webgis应用中使用遥感影像数据需要对其进行切片,提升用户体验,降低客户端性能要求。gdal2tiels.py切片工具可以实现对栅格数据的切片。 这样速度更快:因为最高级的瓦片只能利用gdal从原始tif中获取,其速度受tif尺寸影响很大,且从tif上取得级别越低,单次所取范围越大,速度也越慢.举个实际的例子,从原始tif上获取某位置17级的瓦片的时间将远远大于从原始tif获取4张对应位置的18级瓦片,并将其合成的时间.高分辨率的tif影像数据量高达上百GB,如果直接对其进行切片操作会比较费时,可以先将其分割成多个tif,每个tif分别执行切片操作,最后将瓦片合并到一个文件夹供前端调用。图中的白色实际为透明色,原因是该等级下数据范围只占那么大。 1、感谢以下博客博主以及相关答主的分享: (1)https://www.cnblogs.com/defineconst/p/5927473.html (2)https://jingyan.baidu.com/article/647f0115b7b08d7f2148a8db.html (3)https://blog.csdn.net/a748448660/article/details/811930... 切出来的瓦片y编号不对,折磨了1个星期,终于找到了解决办法,因为gdal2tiles默认采用的是tms标准,而google和mapbox采用的是另一套标准,y需要进行转化. gdal2tiles.py是一个gdal的扩展插件,运用gdal的数据接入口,将栅格图片切成小瓦片和元数据,遵循OSGeo TMS标准。让你自己的数据在openlayers和googlemap,方便你展示空间数据。 瓦片编号为... 作为WebGIS开发者,绝大部分人都接触过GeoServer,自己都调用过用GeoServer发布的WMS、WTMSTMS服务。但是GeoServer毕竟是基于java开发的,性能还是有点慢的,切片时服务能进入假死状态。很多时候,我都在想能不能自己开发一个切片服务,提升一下效率。 最近,使用Python+Flask+GDAL开发了一个切片服务,通过MapBox调用时,完美展示出来。虽然是动态切片,但是效率一点也不慢。 目录前言数据准备开发环境GDAL切片实现切片服务逻辑服务测试注意 I’m here showing how you can use GDAL2Tiles to generate map tiles of Tom Patterson’sNatural Earth II. This is a beautiful raster map that portrays the world environment in an idealised manner with li... 一直以来,作为一个GIS开发者,都想自己去实现栅格切片和矢量切片。前面的博文中,已经介绍了如何实现矢量切片,刚刚进入GIS行业的人一般都是用GeoServer进行栅格切片,速度效率很低。这里介绍一下如何使用代码高效地进行栅格切片,主要是依赖gdal2tiles这个python库。 我的电脑环境是 python3.9.5 GDAL3.3.0 执行下面的安装命令 安装gdal2tiles pip install gdal2tiles 切片代码 GIS数据处理-栅格切片工具 常见的切片工具 MapTiler:把 GDAL2Tiles 工具做了个图形化界面,使用更方便。暂时只支持栅格图片,如TIFF/GeoTIFF, MrSID, ECW, JPEG2000, JPEG, PNG等。支持在Google Maps, Openlayers等上使用。 Google Maps Image Cutter:顾名思义,基本上来说专门为Google Maps 提供Overlay的,切图完毕后,有个直接用Google Maps的界面展示。 MapCruncher:主要