關于GDAL的使用,網上的資料都很多,主要還是要熟悉GDAL的組織結構,類以及類的函數等,熟悉了,使用GDAL就不在話下了。最常用的就是動態庫的GDAL,當然你也可以使用靜態庫,這里只是簡單的介紹使用動態GDAL庫來做開發。
首先打開VS,新建一個工程,控制臺的就成。然后在工程的屬性對話框中,找到【配置屬性】-【C/C++】-【常規】,右側的【附加包含目錄】中,將GDAL的include文件夾路徑填寫到這里,如下圖:
第二、繼續在屬性對話框中,找到【配置屬性】-【鏈接器】-【常規】,右側的【附加庫目錄】中,將GDAL的lib文件夾路徑填寫到這里,如下圖:
源碼是什么、
第三、在【配置屬性】-【鏈接器】-【輸入】,右側的【附加依賴項】中,將gdal_i.lib填寫到此處。然后點擊確定即可。至此,使用GDAL的環境全部搭建完成,剩下的就是在您的代碼中使用GDAL了。
將下面的代碼(代碼摘自GDAL官方指南:http://gdal.org/gdal_tutorial.html)貼到剛才新建的工程中的cpp文件中,保存后編譯,正常情況下會提示生成成功,然后運行,會在控制臺上將圖像的信息輸出。
#include "gdal_priv.h"
#include "cpl_conv.h" //for CPLMalloc()int main()
{//注冊文件格式GDALAllRegister();const char* pszFile = "C:\\Test.img";GDALDataset *poDataset;//使用只讀方式打開圖像poDataset = (GDALDataset*) GDALOpen( pszFile,GA_ReadOnly );if( poDataset == NULL ){printf( "File: %s不能打開!\n",pszFile);return 0;}//輸出圖像的格式信息printf( "Driver:%s/%s\n",poDataset->GetDriver()->GetDescription(),poDataset->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME) );//輸出圖像的大小和波段個數printf( "Size is%dx%dx%d\n",poDataset->GetRasterXSize(),poDataset->GetRasterYSize(),poDataset->GetRasterCount());//輸出圖像的投影信息if( poDataset->GetProjectionRef() != NULL )printf( "Projectionis `%s'\n", poDataset->GetProjectionRef() );//輸出圖像的坐標和分辨率信息double adfGeoTransform[6];if( poDataset->GetGeoTransform( adfGeoTransform) == CE_None ){printf( "Origin =(%.6f,%.6f)\n",adfGeoTransform[0], adfGeoTransform[3]);printf( "PixelSize = (%.6f,%.6f)\n",adfGeoTransform[1], adfGeoTransform[5]);}GDALRasterBand *poBand;int nBlockXSize, nBlockYSize;int bGotMin, bGotMax;double adfMinMax[2];//讀取第一個波段poBand = poDataset->GetRasterBand( 1 );//獲取圖像的塊大小并輸出poBand->GetBlockSize(&nBlockXSize, &nBlockYSize );printf( "Block=%dx%dType=%s, ColorInterp=%s\n",nBlockXSize, nBlockYSize,GDALGetDataTypeName(poBand->GetRasterDataType()),GDALGetColorInterpretationName(poBand->GetColorInterpretation()));//獲取該波段的最大值最小值,如果獲取失敗,則進行統計adfMinMax[0] = poBand->GetMinimum( &bGotMin);adfMinMax[1] = poBand->GetMaximum( &bGotMax);if( ! (bGotMin&& bGotMax) )GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax);printf( "Min=%.3fd,Max=%.3f\n", adfMinMax[0], adfMinMax[1] );//輸出圖像的金字塔信息if( poBand->GetOverviewCount() > 0 )printf( "Band has%d overviews.\n", poBand->GetOverviewCount() );//輸出圖像的顏色表信息if( poBand->GetColorTable() != NULL)printf( "Band hasa color table with %d entries.\n",poBand->GetColorTable()->GetColorEntryCount() );float *pafScanline;int nXSize = poBand->GetXSize();//讀取圖像的第一行數據pafScanline = (float*) CPLMalloc(sizeof(float)*nXSize);poBand->RasterIO(GF_Read, 0, 0, nXSize,1, pafScanline, nXSize,1, GDT_Float32, 0, 0 );CPLFree(pafScanline);//關閉文件GDALClose((GDALDatasetH)poDataset);
}
hadoop源碼編譯調試。在很多時候我們需要看看GDAL的內部實現,當然可以直接查看GDAL的源代碼,但是直接看源代碼,不能很好的理解,這時候就需要調試查看源代碼中變量的內容。調試GDAL的源代碼,需要GDAL的debug版本,以及編譯GDAL的時候的pdb等調試文件。當然也可以把GDAL的源代碼加入到你的工程中,但是這樣太費時費力。
下面就有一個很簡單的方法,可以直接調試進GDAL的源代碼中,首先編譯一下GDAL的debug版本,將編譯生成的文件,主要有gdal18.dll,gdal_i.exp,gdal_i.lib,gdal.lib,gdal18.pdb,gdal18.ilk,gdal18.exp等文件,將gdal18開頭的文件拷貝到自己工程的生成目錄中,然后調試自己的程序,在執行到GDALOpen函數(或者其他GDAL的函數)時按F11鍵,就會進入到GDAL的源代碼中進行調試GDAL代碼。
1、使用GDAL進行圖像裁切,參考http://blog.csdn.net/liminlu0314/article/details/6136512
qt源碼剖析、2、使用GDAL進行圖像重采樣,參考http://blog.csdn.net/liminlu0314/article/details/6130064
3、使用GDAL創建金字塔,參考http://blog.csdn.net/liminlu0314/article/details/6127755
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态