配置GDAL及使用CPP调用GDAL

配置GDAL

首先打开Visual Studio 2019,新建控制台工程,控制台工程名字叫做“简单调用GDAL”。

右击工程,找到“属性”

微信截图_20221130150651

把GDAL的include文件夹填写到“附加包含目录”中,如下图。

附加包含目录

附加包含目录2

把GDAL的lib文件夹填写到“附加库目录”中,如下图。

添加GDAL附加库目录

简单调用GDAL

GDAL封装了很多类、函数接口,我们要去学习怎么调用它们。

# include "gdal_priv.h"
using namespace std;
#include <iostream>

int main()
{	
	printf("strat!\n");
    //注册文件格式
	GDALAllRegister();
	const char* file = "D:\\hh1.tif";
	GDALDataset *ds = (GDALDataset*) GDALOpen (file, GA_ReadOnly);
	//A* p则使用:p->play(); 左边是结构指针。
	//A p 则使用:p.paly(); 左边是结构变量。
	int Xsize = ds->GetRasterXSize();
	int Ysize = ds->GetRasterYSize();
	printf("Xsize =%d\n" , Xsize);
	printf("影像长为%d,宽为%d\n", ds->GetRasterXSize(), ds->GetRasterYSize());

    //读取影像第一波段
	GDALRasterBand* band = ds->GetRasterBand(1);
	int min,max;
	double minmax[2];
	//char a;
	//a = &min;
	minmax[0] = band->GetMinimum(&min);
	minmax[1] = band->GetMaximum(&max);
	printf("\n最小值是:%fd\n最大值是%f\n", minmax[0],minmax[1]);

	int nXsize = band->GetXSize();
	float	*pafScanline = new float[Xsize *Ysize];
	band->RasterIO(GF_Read, 0, 0, Xsize, Ysize, pafScanline, Xsize, Ysize, GDT_Float32, 0, 0);  //pafScanline是影像矩阵

	// 循环打印影像矩阵的每一个数值
	int num_iamge_size = 0;
	for (int i = 0; i < Xsize; i++)
	{
		for (int j = 0; j < Ysize; j++)
		{
			num_iamge_size++;
			//if (i<10 && j < 10)
			cout << pafScanline[i * Ysize + j] << endl;
		}
		//cout << i << "---" << pafScanline[i*nImgSizeY] << endl;
	}

	printf("ok");
}

小结

CPP是挺难的,不过学习这件事本来就是要坚持!