GDAL读取GeoTif的基本操作


	近期在开发一个遥感地图的云采样软件,正好为南航一位同学写了一个小文档解释怎么使用GDAL读取文件,现在贴一下。

//使用GDAL时,只需要包含头文件
//包含目录库目录配置好,在链接器->输入->附加依赖项里添加“gdal_i.lib”
//把bin里的dll文件放入程序运行目录下
#include "gdal_priv.h"

//tif文件读取
	std::string name = “H:/test/xxx.TIF”;
	const char *charName = name.c_str();
	//注册
	GDALAllRegister();
	//以防中文名不能正常读取
	CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");
	GDALDataset *m_pDataset = (GDALDataset*)GDALOpen(charName, GA_ReadOnly);
	if (m_pDataset[i] == NULL)
	{ 
		QMessageBox::information(this,tr("提示"), tr("指定的文件不能打开!"));	
		return;
	} 
	//获取第1波段的波段指针,参数就是表示第几波段的意思  
	GDALRasterBand *pBand =m_pDataset->GetRasterBand(1);   
	//获取数据宽度和高度,(带黑框的大图的)
	int dataWidth = m_pDataset[i]->GetRasterXSize();
	int dataHeight = m_pDataset[i]->GetRasterYSize();
	//比例系数
	int dScale = dataHeight/m_size;
	//缓存大小
	int bufHeight = dataHeight/dScale;
	int bufWidth = dataWidth/dScale;
	unsigned char* m_data = new unsigned char[bufHeight*bufWidth];
	//读取数据
	CPLErr err = pBand->RasterIO(GF_Read,0, 0, dataWidth, dataHeight, m_data, bufWidth, bufHeight, GDT_Byte, 0, 0);  
	//RasterIO函数用法参考这个网址http://blog.csdn.net/liminlu0314/article/details/7072224
	
	
	
	//合成就是每个波段数据读出之后分别放入rgb对应位置
	//我的代码是Qt的,你可以转换成你显示的相关函数
	QImage QImg(bufWidth, bufHeight, QImage::Format_RGB32);
    QRgb value;
	for (int i = 0; i < bufWidth; i++)
	{
		for (int j = 0; j < bufHeight; j++)
		{
			value = qRgb(m_data[2][j*bufWidth+i], m_data[1][j*bufWidth+i], m_data[0][j*bufWidth+i]);
			QImg.setPixel(i, j, value);
		}
	}
	
	//关于经纬度的读取,就是读取大图像四个角的经纬度
	//算出长和宽方向上的经纬度间隔,然后算出长和宽方向上每个像素点的经纬度数
	//基于大图像的四个角中的合适点,根据点的相对像素移动,计算出该点经纬度
	float longGap = m_commonInfo->dataUpperRightLong - m_commonInfo->dataLowerLeftLong;
    float latGap = m_commonInfo->dataUpperLeftLat - m_commonInfo->dataLowerRightLat;
	float longitude = m_commonInfo->productLowerLeftLong + (sample->x - m_commonInfo->dataLowerLeft_x)*longGap/dataWidth;
    float latitude = m_commonInfo->productLowerRightLat + (sample->y - m_commonInfo->dataLowerRight_y)*latGap/dataHeight;


你可能感兴趣的:(遥感,Qt)