Automatycznie stylizować raster przy użyciu unikalnych wartości w QGIS?

17

W ArcMap możliwe jest automatyczne obliczenie unikalnych wartości rastra, a następnie zastosowanie innego stylu do każdej unikalnej wartości (patrz 1. zdjęcie).

Jednak w QGIS muszę ręcznie dodawać wartości do stylizacji podczas korzystania ze stylu „Jednopasmowy pseudokolor” (patrz drugi obraz). Czy istnieje sposób automatycznego zapełniania unikalnych wartości, tak jak ArcMap?

ArcMap:

Unikalne wartości symboliki rastrowej ArcMap

QGIS (jak automatycznie wypełnić listę wartości unikalnymi wartościami?):

Raster QGIS

Peet Whittaker
źródło
Klasyfikacja znajduje się po prawej stronie. Nie jestem pewien, dlaczego wycinasz to na zrzucie ekranu, ponieważ są to opcje, których potrzebujesz ... Po prostu ustaw liczbę klas na maksymalną różnicę +1. Użyj trybu tego samego interwału. Problemem może być sytuacja, gdy dane nie są zaraźliwe, wtedy musisz usunąć nieużywane wartości.
Matte
@ Matte Rzeczywiście jednak zwykle mamy nieciągłe dane z dużymi lukami. Dlatego nie jest praktyczne usuwanie wartości, które nie znajdują się w rastrze (powiedzmy na przykład, że jedynymi wartościami są 1 i 1000000, należy ręcznie usunąć DUŻĄ liczbę liczb). Ponadto zakłada to pewną a priori znajomość unikalnych wartości rastra ...
Peet Whittaker

Odpowiedzi:

3

Dla tych, którzy wciąż tego szukają. Unikalne wartości rastrowe zostały dodane do QGIS 3. ”Dodane przez Nyall Dawson około rok temu

[FUNKCJA] Zezwól na klasyfikowanie renderowanego palety przy użyciu unikalnych wartości z warstwy rastrowej

Dodaje łatwy sposób stylizowania dyskretnych rastrów, takich jak klasy użytkowania terenu, za pomocą renderera Paletted. Wystarczy wybrać renderer z paletą, wybrać zespół, a następnie nacisnąć przycisk „Dodaj unikalne wartości”. Unikalne wartości pikseli zostaną pobrane z warstwy, a kolor zostanie przypisany do każdej z nich przy użyciu aktualnie wybranej rampy kolorów. ”

Baswein
źródło
7

Oto podejście, które może być pomocne. Narzędzie GRASS r.reportjest w stanie obliczyć podstawową statystykę dla każdej unikalnej wartości w warstwie rastrowej:

wprowadź opis zdjęcia tutaj

Dane wyjściowe można zapisać jako zwykły plik tekstowy wyglądający tak (po lewej: wartości unikalne, po prawej: obszar objęty każdą wartością):

+-----------------------------------------------------------------------------+
|                      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|
+-----------------------------------------------------------------------------+

Poniższy skrypt geoprzetwarzania pobiera ten plik tekstowy jako dane wejściowe i konfiguruje odpowiedni renderer (dla wygody dla losowych kolorów) dla warstwy rastrowej (zainspirowany przez LAWHEAD, J .: QGIS Python Programming Cookbook, s. 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)

Dzięki legendarnym możliwościom przetwarzania QGIS można połączyć te dwa elementy w graficznym modelerze i dodać parametr rastrowy, aby po prostu wybrać załadowaną warstwę rastrową:

wprowadź opis zdjęcia tutaj

Po zapisaniu modelu, klikając go dwukrotnie w przyborniku przetwarzania, można go używać jak zwykłego narzędzia:

wprowadź opis zdjęcia tutaj

Z wynikiem wyglądającym tak (wychylenie zrasteryzowanego zestawu danych natura2000):

wprowadź opis zdjęcia tutaj

Lub we właściwościach warstwy:

wprowadź opis zdjęcia tutaj

Myślę, że wymaga to nieco udoskonalenia doświadczenia użytkownika, ale to pierwszy krok.

Jochen Schwarze
źródło
1
nie najlepsza obsługa, ale dzięki za udostępnienie
RutgerH
Widząc tylko narzędzie utworzone jako interfejs użytkownika, myślę, że nie ma nic złego w doświadczeniu użytkownika. I kto wie, co dzieje się za sceną w narzędziach ESRI Geoprocessing ...
Jochen Schwarze