第二个GDAL程序

之前看过一个GDAL入门程序,下面再看一个,熟悉一下GDAL;

#include "stdafx.h"
#include 

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文件的一些信息,然后输出了第一个波段的最大值最小值; 

第二个GDAL程序_第1张图片

项目的配置是这样,

第二个GDAL程序_第2张图片 

 

第二个GDAL程序_第3张图片 

D盘要有这些;

第二个GDAL程序_第4张图片 

gdal的dll拷贝到项目中;

这是一个书上的代码和示例数据;先了解一下;

我还不太了解tif文件;下面看一下gis的tif文件和通用的tif文件;

GEOTIFF和TIFF都是图像文件格式,但前者包含了地理元数据,使其适用于地理信息领域,而后者是通用的图像文件格式,用途广泛,但通常不包含地理信息。 

你可能感兴趣的:(VC++,GIS,算法,GDAL,tif,geotiff)