GDAL创建图像提示Driver xxx does not support XXX creation option的原因

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liminlu0314/article/details/51088672

经常在群里有人问,创建图像的时候为什么老是提示下面的信息。

CPLError: Driver GTiff does not support DCAP_CREATE creation option
Warning 6: Driver GTiff does not support DCAP_CREATE creation option
CPLError: Driver GTiff does not support DCAP_CREATECOPY creation option
Warning 6: Driver GTiff does not support DCAP_CREATECOPY creation option
CPLError: Driver GTiff does not support DCAP_VIRTUALIO creation option
Warning 6: Driver GTiff does not support DCAP_VIRTUALIO creation option
CPLError: Driver GTiff does not support DMD_CREATIONDATATYPES creation option
Warning 6: Driver GTiff does not support DMD_CREATIONDATATYPES creation option
CPLError: Driver GTiff does not support DMD_CREATIONOPTIONLIST creation option
Warning 6: Driver GTiff does not support DMD_CREATIONOPTIONLIST creation option
CPLError: Driver GTiff does not support DMD_EXTENSION creation option
Warning 6: Driver GTiff does not support DMD_EXTENSION creation option
CPLError: Driver GTiff does not support DMD_HELPTOPIC creation option
Warning 6: Driver GTiff does not support DMD_HELPTOPIC creation option
CPLError: Driver GTiff does not support DMD_LONGNAME creation option
Warning 6: Driver GTiff does not support DMD_LONGNAME creation option
CPLError: Driver GTiff does not support DMD_MIMETYPE creation option
Warning 6: Driver GTiff does not support DMD_MIMETYPE creation option
CPLError: Driver GTiff does not support DMD_SUBDATASETS creation option
Warning 6: Driver GTiff does not support DMD_SUBDATASETS creation option

测试的代码如下:

            GDALAllRegister();
            GDALDriver *poDriver = GetGDALDriverManager()->GetDriverByName("GTiff");
            char **papszCreateOptions = poDriver->GetMetadata();

            GDALDataset *poDS = poDriver->Create("D:\\test.tif", 512, 512, 3, GDT_Byte, papszCreateOptions);

            // do something

            GDALClose((GDALDatasetH)poDS);

上面的代码中有个错误就是papszCreateOptions这个参数的值设置错误,如果没有创建选项,就指定为NULL就可以了,为啥要获取Dirver的元数据呢???

注意上面的代码,Create函数或者CreateCopy函数中有个参数叫CreateOptions,这个参数的意思就是为了指定创建图像的一些特殊选项,比如Tiff图像的压缩方式,Jpeg图像的压缩率,ENVI的图像存储方式等等,每种驱动所对应的创建选项也不会相同,具体的都可以在gdal的官网中的格式说明中找到非常详细的介绍,每种驱动页面中只要是支持创建的格式一般都会有一个Cerete Options的章节,里面就是这种格式的创建选项以及使用设置的参数信息。

知道了这个参数的原因,就明白了为什么会出现上面的提示,主要原因就是你设置的创建选项是错误的,所以GDAL提示了出来。

这个问题群里面非常多的人问,我觉得应该是有人在网上将这种错误的写法贴出来了,所以我搜了下,下面的网址中的用法都是这个原因导致的。
http://blog.sciencenet.cn/blog-98709-486392.html (char **papszMetadata = poDriver->GetMetadata();)

最后希望大家在网上搜索资料的时候学会判断哪些是对的,那些是错误的,不要一股脑的全部拿来用。

猜你喜欢

转载自blog.csdn.net/liminlu0314/article/details/51088672
xxx
今日推荐