使用QGIS中的唯一值自动设置栅格样式?


17

在ArcMap中,可以自动计算栅格的唯一值,然后对每个唯一值应用不同的样式(请参见第1张图像)。

但是,在QGIS中,使用“单带伪彩色”样式时,我必须手动添加样式值(请参见第二张图片)。有没有一种方法可以像ArcMap一样自动填充唯一值?

ArcMap:

ArcMap栅格符号系统的唯一值

QGIS(如何使用唯一值自动填充值列表?):

QGIS栅格定位


您的分类在右侧。不确定为什么要在屏幕快照中剪切它,因为这些是您需要的选项...只需将类数设置为最大-最小差异+1即可。使用模式间隔相同。问题可能出在您的数据不连续时,则需要删除未使用的值。
Matte

@Matte的确,但是,我们通常具有不连续的数据,并且存在很大的差距。因此,删除实际上不在栅格内的值是不切实际的(例如,仅值是1和1000000,则必须手动删除很多数字)。另外,这还假设您具有栅格内唯一值的先验知识……
Peet Whittaker

Answers:


3

对于那些仍在寻找这个。唯一的栅格值已添加到QGIS 3中。“由Nyall Dawson添加,大约于1年前

[功能]允许使用栅格图层中的唯一值对调色板渲染器进行分类

添加了一种使用Paletted渲染器为离散栅格(例如土地用途类)设置样式的简便方法。只需选择“调色板渲染器”,选择一个色带,然后单击“添加唯一值”按钮即可。唯一的像素值将从图层中获取,并使用当前选定的色带为每个像素分配一种颜色。”


7

这是一种可能有用的方法。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数据集的露头):

在此处输入图片说明

或在图层属性中:

在此处输入图片说明

我认为这需要对用户体验进行一些改进,但这是第一步。


1
不是最好的用户体验,但感谢您的分享
RutgerH

我认为,仅看到创建为UI的工具,用户体验就没有问题。谁知道,ESRI地理处理工具在后台发生了什么……
Jochen Schwarze
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.