《影像數(shù)據(jù)格式訪問開源包》由會員分享,可在線閱讀,更多相關(guān)《影像數(shù)據(jù)格式訪問開源包(16頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、GDAL GDAL簡介官網(wǎng):http:/www.gdal.org/GDAL是一個開源的柵格空間數(shù)據(jù)和影像數(shù)據(jù)的讀寫、轉(zhuǎn)換器。目前支持100多種柵格格式(http:/www.gdal.org/formats_list.html)C/C+版 GDAL數(shù)據(jù)模型核心數(shù)據(jù) Dataset(數(shù)據(jù)集) Raster Band(波段) Metadata(元數(shù)據(jù))坐標系統(tǒng) Coordinate System(坐標系統(tǒng)) Affine GeoTransform (仿射變換) GCP(地面控制點) Color Table(顏色表) Overviews(金字塔層) 讓格式得到支持編譯時打開格式開關(guān)有些是默認的編譯的,
2、有些是需修改后重新編譯的參看http:/www.gdal.org/formats_list.html程序中獲取格式的Driver注冊格式的Driver 注冊所有格式注冊所有格式GDALAllRegister();注意:必須在編譯時打開格式開關(guān)。通常在程序中調(diào)用其他GDAL函數(shù)之前,必須首先調(diào)用此函數(shù)反動作GDALDestroyDriverManager(); 打開數(shù)據(jù)集 GDALOpenGDALDatasetH GDALOpen (const char *pszFilename, GDALAccess eAccess) GDALAccess: GA_ReadOnly :只讀 GA_Update
3、 :讀寫可自動識別數(shù)據(jù)格式。成功返回句柄,失敗返回NULL。 GDALClose關(guān)閉數(shù)據(jù)集 獲取基本信息 GDALGetRasterXSize獲取列數(shù) GDALGetRasterYSize獲取行數(shù) GDALGetRasterCount獲取波段數(shù) GDALGetGeoTransform獲取仿射變換參數(shù) GDALGetGCPs獲取控制點 獲取波段GDALGetRasterBandHGDALRasterBandH GDALGetRasterBand ( GDALDatasetH hDS, int nBandId) nBandId:從1起算成功返回波段句柄,失敗返回NULL 獲取波段基本信息GDALG
4、etRasterBandXSizeGDALGetRasterBandYSizeGDALGetRasterDataTypeGDALGetRasterColorTableGDALGetDefaultRAT 按塊(block)讀寫柵格數(shù)據(jù)按block讀寫可以獲得很高的性能 GDALGetBlockSize:獲取一個標準block的大小(橫向和縱向像素數(shù)) ReadBlock:讀一個block WriteBlock:寫一個block計算block數(shù)目: GDALGetBlockSize(hBand, nXBlocks = (GDALRasterBandGetXSize(hBand) + nXBlock
5、Size - 1) / nXBlockSize; nYBlocks = (GDALRasterBandGetYSize(hBand) + nYBlockSize - 1) / nYBlockSize; GDALReadBlock ( GDALRasterBandH hBand, int nXOff, int nYOff, void * pData ) 必須預先分配足夠的內(nèi)存給pData。CPLErr GDALWriteBlock ( GDALRasterBandH hBand, int nXOff, int nYOff, void * pData ) 讀寫任意區(qū)域柵格數(shù)據(jù)CPLErr GDAL
6、RasterIO ( GDALRasterBandH hBand, GDALRWFlag eRWFlag, int nXOff, int nYOff, int nXSize, int nYSize, void * pData, int nBufXSize, int nBufYSize, GDALDataType eBufType, int nPixelSpace, int nLineSpace ) 注意:性能可能不高。如果是讀數(shù)據(jù),必須分配足夠的內(nèi)存給pData。本函數(shù)會自動根據(jù)eBufType進行類型轉(zhuǎn)換。 像素坐標和地理坐標仿射轉(zhuǎn)換獲取轉(zhuǎn)換系數(shù):double a6;GDALGetGeoTr
7、ansform( hDataset, a );轉(zhuǎn)換函數(shù)void World2Pixel(double a6, double x, double y, int* r, int* c) *r = (int)(a4*x - a1*y - a4*a0 + a1*a3)/(a4*a2 - a1*a5);*c = (int)(a5*x - a2*y - a5*a0 + a2*a3)/ (a5*a1 - a2*a4);void Pixel2World(double a6, int r, int c, double* x, double* y) *x = a0 + a1 * c + a2 * r; *y =
8、a3 + a4 * c + a5 * r; 獲取柵格總范圍將(0,0)和(XSize, YSize)傳遞給Pixel2World函數(shù)即可得到對角坐標。 獲取格式驅(qū)動GDALDriverH GDALGetDriverByName (const char * pszName)pszName可從源代碼或http:/www.gdal.org/formats_list.html的Code項獲得。 創(chuàng)建新的柵格文件GDALDatasetH GDALCreate ( GDALDriverH hDriver, const char * pszFilename, int nXSize, int nYSize, int nBands, GDALDataType eBandType, char * papszOptions ) 若成功返回數(shù)據(jù)集句柄,失敗則返回NULL。 papszOptions與具體的格式有關(guān),在很多情況下可為NULL。