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

經常在羣裏有人問,創建圖像的時候爲什麼老是提示下面的信息。

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();)

最後希望大家在網上搜索資料的時候學會判斷哪些是對的,那些是錯誤的,不要一股腦的全部拿來用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章