GDALAllRegister(); //注册所有的驱动;
GDALDataset *poDataset; //GDAL数据集;
char *fileName = "D:\\1.tif";
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES"); // 支持中文路径;
poDataset = (GDALDataset *)GDALOpen(fileName, GA_ReadOnly); //读取影像;
if (poDataset == NULL)//为空时表示读取失败;
{
cout << "fail in open files!!!" << endl;
return 0;
}
//获取图像的尺寸;
int imageWidth = poDataset->GetRasterXSize();
int imageHeight = poDataset->GetRasterYSize();
int bandcount = poDataset->GetRasterCount(); // 获取波段数;
//获取坐标变换系数;
//adfGeoTransform[6] 数组adfGeoTransform保存的是仿射变换中的一些参数,分别含义见下
//adfGeoTransform[0] 左上角x坐标
//adfGeoTransform[1] 东西方向分辨率
//adfGeoTransform[2] 旋转角度, 0表示图像 "北方朝上"
//adfGeoTransform[3] 左上角y坐标
//adfGeoTransform[4] 旋转角度, 0表示图像 "北方朝上"
//adfGeoTransform[5] 南北方向分辨率
double adfGeoTransform[6];
CPLErr aaa = poDataset->GetGeoTransform(adfGeoTransform);
const char* PrjRef = poDataset->GetProjectionRef();//获取影像投影信息;
OGRSpatialReference projSRS;
projSRS.importFromWkt(&PrjRef);
double CenterX = 0.0;
double CenterY = 0.0;
// OGRSpatialReference::IsProjected()和OGRSpatialReference::IsGeographic()判断是地理坐标系统还是投影坐标系统;
if (projSRS.IsGeographic())
{
//获取中心点坐标,亦可修改获取任意点坐标;
CenterX = adfGeoTransform[0] + imageWidth * 0.5 * adfGeoTransform[1] + imageWidth * 0.5 * adfGeoTransform[2];
CenterY = adfGeoTransform[3] + imageHeight * 0.5 * adfGeoTransform[4] + imageHeight * 0.5 * adfGeoTransform[5];
}
else if(projSRS.IsProjected())
{
CenterX = adfGeoTransform[0] + imageWidth * 0.5 * adfGeoTransform[1] + imageWidth * 0.5 * adfGeoTransform[2];
CenterY = adfGeoTransform[3] + imageHeight * 0.5 * adfGeoTransform[4] + imageHeight * 0.5 * adfGeoTransform[5];
OGRSpatialReference geoSRS;
geoSRS = *projSRS.CloneGeogCS();//获取当前投影坐标系对应的地理坐标系信息,作为坐标转换中的目标坐标系信息;
//初始化坐标转换转化类,投影坐标转地理坐标;
OGRCoordinateTransformation *coord = OGRCreateCoordinateTransformation(&projSRS, &geoSRS);
coord->Transform(1, &CenterX , &CenterY); //部分GDAL版本坐标转换会出错;
}
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO"); // 用完之后关闭支持中文路径,否则可能导致其他功能不识别中文;
05-18
2517
12-19
1660