之前看过一个GDAL入门程序,下面再看一个,熟悉一下GDAL;
#include "stdafx.h"
#include <gdal_priv.h>
int main()
{
//注册文件格式
GDALAllRegister();
const char* pszFile = "D:\\3dtile\\GDALtestdata\\7-Data\\calss.tif";
//使用只读方式打开图像
GDALDataset *poDataset = (GDALDataset*)GDALOpen(pszFile, GA_ReadOnly);
if (poDataset == NULL)
{
printf("File: %s不能打开!\n", pszFile);
return 0;
}
//输出图像的格式信息
printf("Driver:%s/%s\n",
poDataset->GetDriver()->GetDescription(),
poDataset->GetDriver()->GetMetadataItem(GDAL_DMD_LONGNAME));
//输出图像的大小和波段个数
printf("Size is%dx%dx%d\n",
poDataset->GetRasterXSize(), poDataset->GetRasterYSize(),
poDataset->GetRasterCount());
//输出图像的投影信息
if (poDataset->GetProjectionRef() != NULL)
printf("Projectionis `%s'\n", poDataset->GetProjectionRef());
//输出图像的坐标和分辨率信息
double adfGeoTransform[6];
if (poDataset->GetGeoTransform(adfGeoTransform) == CE_None)
{
printf("Origin =(%.6f,%.6f)\n",
adfGeoTransform[0], adfGeoTransform[3]);
printf("PixelSize = (%.6f,%.6f)\n",
adfGeoTransform[1], adfGeoTransform[5]);
}
//读取第一个波段
GDALRasterBand *poBand = poDataset->GetRasterBand(1);
//获取该波段的最大值最小值,如果获取失败,则进行统计
int bGotMin, bGotMax;
double adfMinMax[2];
adfMinMax[0] = poBand->GetMinimum(&bGotMin);
adfMinMax[1] = poBand->GetMaximum(&bGotMax);
if (!(bGotMin&& bGotMax))
GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax);
printf("Min=%.3fd,Max=%.3f\n", adfMinMax[0], adfMinMax[1]);
int nXSize = poBand->GetXSize();
float *pafScanline = new float[nXSize];
//读取图像的第一行数据
poBand->RasterIO(GF_Read, 0, 0, nXSize, 1, pafScanline, nXSize, 1, GDT_Float32, 0, 0);
delete[]pafScanline;
//关闭文件
GDALClose((GDALDatasetH)poDataset);
}
输出了tif文件的一些信息,然后输出了第一个波段的最大值最小值;
项目的配置是这样,
D盘要有这些;
gdal的dll拷贝到项目中;
这是一个书上的代码和示例数据;先了解一下;
我还不太了解tif文件;下面看一下gis的tif文件和通用的tif文件;
GEOTIFF和TIFF都是图像文件格式,但前者包含了地理元数据,使其适用于地理信息领域,而后者是通用的图像文件格式,用途广泛,但通常不包含地理信息。