这是一种可能有用的方法。GRASS工具r.report
能够为栅格图层中的每个唯一值计算基本统计信息:
可以将输出写为纯文本文件,如下所示(左:唯一值,右:每个值覆盖的区域):
+-----------------------------------------------------------------------------+
| Category Information | square|
| #|description | miles|
|-----------------------------------------------------------------------------|
|1111| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 1.249845|
|1113| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 0.062666|
[...]
|3412| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 0.013926|
|4111| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 4.713902|
|4211| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 0.083555|
|4212| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 0.135777|
|-----------------------------------------------------------------------------|
|TOTAL | 17.048727|
+-----------------------------------------------------------------------------+
以下地理处理脚本将这个文本文件作为输入,并为栅格图层设置了合适的渲染器(为方便起见,使用随机颜色)(由LAWHEAD启发,J。:QGIS Python编程手册,第135页):
##giswg=group
##thexml=file
##theraster=raster
from random import randint
from PyQt4.QtGui import QColor
from qgis.core import *
myraster = processing.getObject(theraster)
infile = open(thexml, 'r')
univalues = [l.split('|')[1] for l in [f for f in infile.readlines()][4:-4]]
s = QgsRasterShader()
c = QgsColorRampShader()
c.setColorRampType(QgsColorRampShader.EXACT)
i = []
for u in univalues:
i.append(QgsColorRampShader.ColorRampItem(float(u), QColor('#%06x' % randint(0, 2**24)), u))
c.setColorRampItemList(i)
s.setRasterShaderFunction(c)
ps = QgsSingleBandPseudoColorRenderer(myraster.dataProvider(), 1, s)
myraster.setRenderer(ps)
借助QGIS出色的处理能力,您可以将这两者整合到图形建模器中并添加一个栅格参数,以便简单地选择已加载的栅格图层:
保存模型后,通过在处理工具箱中双击它,可以像使用普通工具一样使用它:
结果如下所示(栅格化的natura2000数据集的露头):
或在图层属性中:
我认为这需要对用户体验进行一些改进,但这是第一步。