QGis二次开发,栅格图层波段的保存

21 篇文章 7 订阅
15 篇文章 35 订阅

        对于栅格或矢量影像的读取并显示出来在前面的文章中已经写出,显示方面可以参考前面的文章。在这个文章中主要写的是把栅格影像读取出来后,若是对其进行了处理后如何把栅格波段保存成为TIF格式的文件。

        如果学习过GDAL的话就很容易理解,和GDAL的保存成TIF文件差不多,下面是具体的代码与步骤,可以作为参考:

1.首先是获取栅格图层

	QgsRasterLayer *result = new QgsRasterLayer(tmpName, QStringLiteral("result"));
	if (! result->isValid())
	{
		QMessageBox::information(NULL, "提示", "计算失败,公式有误");
		return;
	}
	// 显示输出结果在画布中(如果没有创建画布可以不要这一行)
	QgsProject::instance()->addMapLayer(result);

2.获取仿射矩阵

// 创建输出文件的仿射矩阵
	QgsRectangle extent_result = result->extent();
	int nCols = result->width();
	int nRows = result->height();
	qDebug() << nCols << endl << nRows << endl;
	double tform[] =
	{
		extent_result.xMinimum(),extent_result.width() / nCols,0.0,
		extent_result.yMaximum(),0.0,-extent_result.height() / nRows
	};
//获取波段的数据类型
	Qgis::DataType DT = result->dataProvider()->dataType(1);
	

3.创建一个输出文件的壳(没有像元数据 )

//QString outFile = ui.lineE_outFile->text();
    QString outFile = "E:/my_outFile.tif";
	qDebug() << "输出名:" << outFile << endl;
	QgsRasterDataProvider *dp = QgsRasterDataProvider::create(QStringLiteral("gdal"),
		outFile,
		QStringLiteral("GTiff"),
		1,
		DT,
		nCols,
		nRows,
		tform,
		result->crs()
	);

4.创建块,将像元数据导入到输出文件中

QgsRasterBlock *block = result->dataProvider()->block(1,result->extent(),nCols,nRows);
	bool res = dp->writeBlock(block, 1);
	if (1 != res)
	{
		QMessageBox::critical(NULL, "警告", "影像块创建失败"); return;
	}
	delete block;// 这两一定要释放,不然程序不关闭,图像block导入不了
	delete dp;

这一步要注意了,block与dp这两个指针一定要释放掉,不然在程序关闭之前像元的值不会导入到输出文件中。

总结:

上面的代码基本上是保存成TIF格式的所以的代码了,在下面就不附上总的代码了。(因为这段代码是我总程序的一段,如果附上完整的代码还需要整理,太麻烦了,偷个懒,嘻嘻.........,其实上面的代码也很简单都能看懂)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值