下载地址:https://trac.osgeo.org/gdal/wiki/DownloadSource
#include "gdal_priv.h"
#include "cpl_conv.h"
#include<iostream>
#include<string>
using namespace std;
int main()
{
//注册文件格式;
GDALAllRegister();
const char* pszFile = "C:\\Users\\Administrator\\Desktop\\GF4_PMS_E114.4_N30.6_20160723_L1A0000122812_Aerosol_GEO_201610131323.tiff";
GDALDataset *poDataset;
poDataset = (GDALDataset*)GDALOpen(pszFile, GA_ReadOnly);
if (poDataset == NULL)
{
cout << "影像读取失败" << endl;
}
cout << "description= " << poDataset->GetDriver()->GetDescription() << endl;
cout << "metadataitem= " << poDataset->GetDriver()->GetMetadataItem(GDAL_DMD_LONGNAME);
cout << "xsize= " << poDataset->GetRasterXSize() << " " << "ysize= " << poDataset->GetRasterYSize() <<" "<<"rastersize="<<poDataset->GetRasterCount()<< endl;
if (poDataset->GetProjectionRef()!=NULL)
{
cout << "投影信息:" << endl;
cout << poDataset->GetProjectionRef() << endl;
}
double adfgeotransform[6];
if (poDataset->GetGeoTransform(adfgeotransform)==CE_None)//能否正常读取仿射参数
{
cout << "成功获取仿射变换参数:" << endl;
for (int i = 0; i < sizeof(adfgeotransform) / sizeof(double);i++)
{
cout << adfgeotransform[i] << " ";
}
cout << endl;
}
GDALRasterBand *poband;
int blocksize_x(0), blocksize_y(0);
poband = poDataset->GetRasterBand(1);
poband->GetBlockSize(&blocksize_x, &blocksize_y);//分块大小
cout << "波段一:" << blocksize_x <<" "<< blocksize_y << endl;
CPLString DATATYPE = GDALGetDataTypeName(poband->GetRasterDataType());
CPLString ColorType = GDALGetColorInterpretationName(poband->GetColorInterpretation());
cout << "栅格数据类型为: "<<DATATYPE << " " <<"栅格颜色类型为: "<< ColorType << endl;
int ArrMaxMin[2];
ArrMaxMin[0] = poband->GetMaximum();
ArrMaxMin[1] = poband->GetMinimum();
std::cout << "像素数据的最值为:" << ArrMaxMin[0] << "和" << ArrMaxMin[1] << std::endl;
//输出图像的金字塔信息
if (poband->GetOverviewCount() != 0) //该函数获得当前波段的金字塔层数,如果没有金字塔返回0;
{
std::cout << "金字塔数目为:" << poband->GetOverviewCount() << std::endl;
}
//输出图像的颜色表信息:
if (poband->GetColorTable() != NULL)
{
std::cout << "颜色表信息:" << poband->GetColorTable()->GetColorEntryCount() << std::endl;
}
//读取图像数据:
int nXsize = poband->GetXSize();
int nYsize = poband->GetYSize();
float *pBuf = (float*)CPLMalloc(sizeof(float)*nXsize);
poband->RasterIO(GF_Read, 0, 0, nXsize, 1, pBuf, nXsize, 1, GDT_Float32, 0, 0);//1.读取还是写出 2 3 4 5.读写范围 6. 读写对应的缓冲 7 8. 缓冲大小 9. 缓冲的数据类型 10 11.控制内存中的数据,通常为0
return 0;
}