GDAL通过RasterIO读写图像文件,数据集的创建,图像相关信息的获取

首先创建数据集

GDALDataset *poDataset; //创建整个图像数据集
GDALRasterBand *poRasterBand;  //创建单个波段数据集
GDALAllRegister(); //注册驱动
poDataset=(GDALDataset *)GDALOpen(  //打开文件
"e:\\124036zuhe.tif"         //文件路径
,GA_ReadOnly);              //打开方式  包括GA_ReadOnly 和  GA_Update
if(poDataset!=NULL)
{
double adfGeoTransform[6];
cout<<"RasterXSize:"<GetRasterXSize()<GetRasterYSize()<GetRasterBand(1)<GetRasterCount()<GetProjectionRef()<GetGeoTransform(adfGeoTransform)<GetGCPCount()<GetGCPProjection()<GetGCPs()<GetRasterBand(1);
cout<<"BandXSize:"<GetXSize()<GetYSize()<GetRasterDataType())<GetColorInterpretation())<RasterIO(GF_Read   //设置读写方式GF_Read和GF_Write
,3000,3000,                   //读取图像的起始位置X,Y
1000,1000,                    //要读取区域的大小,分别为X,Y方向
buff,                         //读入的缓冲区指针
1000,1000,                    //指定缓冲区大小
GDT_Float32,                  //读取图像的数据类型
3,                           //读取的波段数
num                          //读取的波段顺序指针
,0,0,0);                     //先不管
//读取图像到缓冲区
const char *pszFormat = "GTiff";
char *SavePath="D:\\3.tif";
        poDriver = GetGDALDriverManager()->GetDriverByName(pszFormat);  //获取指定驱动类型
        poDatasetCreate=poDriver->Create(                              //创建待写入文件的数据集
        SavePath,                                                      //文件路径
        1000,1000,                                                     //图像文件的大小
        3,                                                             //图像的波段数
        GDT_Float32                                                    //图像数据类型
        ,NULL);                                                        //图像储存方式
        
        double  GeoTransform[6]={ 444720, 30, 0, 3751320, 0, -30 };
poDatasetCreate->RasterIO(GF_Write,0,0,1000,1000,buff,
1000,1000,GDT_Float32,3,num,0,0,0);
//设置图像坐标

poDatasetCreate->RasterIO(                                     //缓冲区内容写入创建的数据集
GF_Write,                                                  //数据集打开方式
0,0,                                                       //写入的起始位置X,Y
1000,1000,                                                 //写入的数据大小X,Y
buff,                                                      //缓冲区指针
1000,1000,                                                 //缓冲区大小
GDT_Float32,                                               //图像数据类型
3,                                                         //波段数目
num,                                                       //波段顺序
0,0,0);

你可能感兴趣的:(GIS)