Qgs开发-读取栅格数据
sf2gis@163.com
2014年10月28日
1 目的:加载栅格并取得指定点(经纬度或行/列号)的像素值
2 原理:计算像素值位置,读取数据
通过驱动程序将栅格读入内存,并按照像素的实际大小,计算内存位置,读取数据。
驱动程序提供相应的计算接口。
3 方法
3.1 加载数据
通过驱动(默认GDAL(key=”gdal”)等),读入Raster数据(QgsRasterLayer)。然后读取数据的内存地址(QgsRasterDataProvider::block())(如果数据过大,则需要分块读取)。
3.2 读取数据
可以通过block()加载数据块,但是此块不能太大。对于大数据(实测超过1G大小,bValid=false,bEmpty=true),只能使用分块读取的方法。小数据(实测不超过1G,但并没有找到官方说明)可以直接取得全部范围并根据行列号取得像素值(QgsRasterDataProvider取得QgsRasterBlock)。
QgsRasterBlock提供value(row,col)取影像数据的行、列号数据。但分块时要重新计算范围,实际上就是QgsRasterDataProvider::Identify()的算法。小数据可以直接使用,方便。
对于经纬度,使用QgsRasterDataProvider::Identify(),会先将经纬度转换为行列号,然后计算读取1*1范围(单个像素)大小的像素值。
4 示例
/**************************************************************************
* @file QgsVectorAnalysis.cpp
* @brief analysis core funtion
*
* analysis core funtion.
* @author sf2gis@163.com
* @date 2014-10-20 16:19:16
**************************************************************************/
#include "qgsrasteranalysis.h"
#include <qgsrasterlayer.h>
#include <QDebug>
#include <qgsmapcanvas.h>
#include <qgsmapsettings.h>
#include <QgsRasterIdentifyResult.h>
using namespace gutang::qgsmaplib;
QgsRasterAnalysis::QgsRasterAnalys

本文介绍了在QGIS开发中如何读取栅格数据,包括加载数据、计算像素位置以及通过经纬度或行列号获取像素值。提供了lonLat2ColRow和colRow2LonLat方法进行坐标转换,以及getRasterValue方法获取特定点的像素值。
最低0.47元/天 解锁文章
1264

被折叠的 条评论
为什么被折叠?



