使用python环境下的gdal进行遥感影像(tif,img格式)概览(overviews)的创建与清除,前边是测试过程,结论在最后
过程
问题起因是拿到一批img格式的影像需要转cog,程序运行中报了个错
Cannot add external overviews when there are already internal overviews
因为之前都是使用没有金字塔的单独tif文件,这次使用的别人那里拿到的img,文件结构大体如下
对img格式不是很熟悉,如果是tif,一般来说概览是作为.ovr文件存在,直接删了就是,img不大敢动,就开始搜gdal文档。
gdal官网里操作概览的程序是gdaladdo,文档如下
其中 -clean是用来清除概览的。因为我想把这一步骤集成在现有python程序里,不想直接调用这个工具。官网文档里这个工具对应的C接口为GDALBuildOverviews(见下图),python接口见#链接,就开始测试
按照文档,设置nOverviews为0可以清除现有概览。我测试了几种写法
in_ds.BuildOverviews("NONE", 0)
in_ds.BuildOverviews("NONE", [0])
in_ds.BuildOverviews("NONE", [])
in_ds.BuildOverviews("NONE")
但是都不行Orz,不是报错就是没用,故放弃,直接调用gdaladdo试一下
gdaladdo.exe -clean D:\2018\2018.img
然后发现别的没啥变化,只有那个2018.rrd文件没了,看了下这个rrd文件原本体积比影像文件小但也很大,故推测rrd文件就是这个img影像的外部金字塔文件,所以就直接手动把剩下几个影像的rrd文件删了,运行一开始的程序,果然不报错了。。。
结论
清除概览
对于tif影像,外部概览文件一般为单独的ovr格式文件,删除就行。对于img,一般为rrd格式文件。
如果是影像内部的概览,应该可以通过gdaladdo工具或datasat.BuildOverviews接口清除,但我没试过。
创建概览
通过gdaladdo工具或datasat.BuildOverviews接口
gdaladdo示例见官网:https://gdal.org/programs/gdaladdo.html#gdaladdo
BuildOverviews示例:
in_ds = gdal.Open("D:/2018/2018.img")
in_ds.BuildOverviews("NEAREST", [2, 4, 8, 16])