gdal 读写图像分块处理(精华版)
/* 版权所有者:赵文*/
一.gdal 进行数据操作
在安装好 gdal 后,即可调用 gdal 库中的函数。
(需要包含的头文件:gdal_priv.h)
1.打开数据集
使用 gdal 库进行数据(影像)操作的第一步就是打开一个数据集。对于“数据集”这个名词大家
可能不会太习惯,但是对于一般的格式来说,一个“数据集”就是一个文件,比如一个 TIFF 文件
就是一个以 tiff 为扩展名的文件。但是对于众多 RS 数据来说,一个数据集包含的绝对不仅仅是
一个文件。对于很多 RS 数据,他们把一张图像分成数个图像文件,然后放在一个文件夹中,
用一些额外的文件来组织它们之间的关系,形成一个“数据集” (有点难以理解,暂且放过)。下面
我们由给定的文件路径文件名打开一个 tiff(GeoTIFF)文件。(任何支持的格式,打开方式都是
这样)
CString strFilePath;
StrFilePath=’d:/rsdata/2005_234.tif’;
GDALDataSet *poDataset; //GDAL 数据集
GDALAllRegister();
poDataset = (GDALDataset *) GDALOpen(strFilePath, GA_ReadOnly );
这样我们就打开了这个文件。通过数据集 poDataset 即可调用各功能函数,如:
GetRasterCount();//获取图像波段数;
GetRasterXSize();//获取图像宽度
GetRasterYSize();//获取图像高度
GetRasterBand();//获取图像某一波段
GetGeoTransform(double *p);//获取图像地理坐标信息长度为六的数组
RasterIO();//对图像数据进行缩放读和写
……
(更具体的 API 列表可以看这里)。
2.获取图像信息、读取图像
打开文件后,下面要做的就是获取文件的相关信息保存在相应变量中,将图像数据读入内存中 ,
等待后续处理了。
2.1 获取基本信息
因为不同格式数据所包含的相关信息有所不同,一般情况下我们需要得到图像的高、宽、波段
数、地理坐标信息,数据类型等。Gdal 库中有相应的函数实现这些功能。下面的代码实现获取
这些信息:
intnBandCount=poDataset->GetRasterCount();
intnImgSizeX=poDataset->GetRasterXSize();
int nImgSizeY=poDataset->GetRasterYSize();
doubleadfGeoTransform[6];