Автоматически стилизовать растр, используя уникальные значения в QGIS?

17

В ArcMap можно автоматически вычислять уникальные значения для растра, а затем применять разные стили к каждому уникальному значению (см. 1-е изображение).

Однако в QGIS мне нужно вручную добавлять значения для стиля при использовании стиля «Одноканальный псевдоцвет» (см. 2-е изображение). Есть ли способ автоматического заполнения уникальных значений, как это делает ArcMap?

ArcMap:

Уникальные значения символики растра ArcMap

QGIS (как автоматически заполнить список значений уникальными значениями?):

QGIS растровое слежение

Пит Уиттакер
источник
У вас есть классификация на правой стороне. Не уверен, почему вы вырезали это в своем скриншоте, так как это те опции, которые вам нужны ... Просто установите количество классов в вашу максимальную - минимальную разницу +1. Используйте режим тот же интервал. Проблема может заключаться в том, что когда ваши данные не являются достоверными, вам нужно удалить неиспользуемые значения.
Матт
@Matte Действительно, однако у нас обычно есть несмежные данные с большими пробелами. Таким образом, нецелесообразно удалять значения, которые на самом деле не входят в растр (скажем, например, единственными значениями являются 1 и 1000000, вам придется вручную удалить МНОЖЕСТВО чисел). Кроме того, это предполагает некоторое априорное знание уникальных значений в растре ...
Пит Уиттакер

Ответы:

3

Для тех, кто все еще ищет это. Уникальные растровые значения были добавлены в QGIS 3. "Добавил Nyall Dawson около 1 года назад

[FEATURE] Разрешить классификацию палитра рендера с использованием уникальных значений из растрового слоя

Добавляет простой способ стилизации дискретных растров, таких как классы землепользования, с использованием средства визуализации Paletted. Просто выберите палитра Renderer, выберите группу, а затем нажмите кнопку «Добавить уникальные значения». Уникальные значения пикселей будут получены из слоя, а цвет будет назначен каждому из них с использованием выбранной в данный момент цветовой шкалы ».

Baswein
источник
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 Programming Cookbook, стр. 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
Я думаю, что с просмотром только инструмента, созданного как пользовательский интерфейс, нет ничего плохого в пользовательском интерфейсе. И кто знает, что происходит за кулисами в инструментах геообработки ESRI ...
Йохен Шварц