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 示例
/******************************************************