源碼是什么,GDAL源碼剖析(六)之GDAL開發及其調試

 2023-11-16 阅读 16 评论 0

摘要:寫在開頭:最近工作太忙,沒時間更新,今天抽空更新一篇,上篇博客是四,這篇是六,中間還有一篇第五篇,主要將GDAL中的Python工具集,盡快給大家更新。 一、簡單的調用 關于GDAL的使用,網上的資料都很多,主要

寫在開頭:最近工作太忙,沒時間更新,今天抽空更新一篇,上篇博客是四,這篇是六,中間還有一篇第五篇,主要將GDAL中的Python工具集,盡快給大家更新。

一、簡單的調用

關于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);
}

二、GDAL源代碼調試

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代碼。

三、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


版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/173216.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息