Mam plik rastrowy, w którym wszystkie komórki mają wartości od -3 do 7, żadna wartość danych to -9999. Jak obliczyć liczbę komórek o określonej wartości, np. 6? Czy mogę korzystać z kalkulatora?
Zainstaluj kalkulator rastrowy QGIS, jeśli nie jest już dostępny (nie określiłeś używanej wersji QGIS)
Użyj kalkulatora rastrowego QGIS z taką formułą "Corine@1" = 23. Spowoduje to wyodrębnienie wszystkich komórek o wartości 23 do nowego rastra
Następnie użyj narzędzia „Statystyka warstw rastrowych” w zestawie narzędzi SEXTANTE dla QGIS, aby obliczyć całkowitą sumę komórek.
2.) Jeśli chcesz bardziej zaawansowanego przeglądu liczby komórek rastrowych, możesz użyć wtyczki LecoS dla QGIS.
Upewnij się, że zainstalowałeś Numpy, Scipy i PIL na swoim komputerze. Znajdź instrukcję, jak to zrobić w systemie Windows na moim blogu lub tutaj .
Pobierz LecoS z instalatora wtyczek i włącz go. Żadne błędy nie powinny się pojawiać.
Uruchom narzędzie statystyk Landcover (Menu Raster -> Ekologia krajobrazu -> Statystyka Landcover) z kształtem rastra. Upewnij się, że Twój kształt ma prawidłowe odwzorowanie, ustawioną wartość bez danych, a także kwadratowe komórki rastrowe.
Wybierz opcje, jak pokazano poniżej. Możesz zapisać wyniki w pliku .csv. Dane wyjściowe zawierają całkowitą osłonę (numer komórki * rozmiar komórki rastrowej ^ 2) dla wszystkich klas osłon.
Wystarczy zauważyć, że obecnie zestaw narzędzi nazywa się Przetwarzanie .
Luís de Sousa
9
EDYCJA 3 : Przekształciłem poniższy kod w całkiem użyteczny skrypt SEXTANTE, który daje następujące wyniki:
Szczegółowa instrukcja i link do pobrania można znaleźć tutaj .
Do tego zadania możesz użyć konsoli Python. Skopiuj poniższy kod, wklej go do pliku tekstowego i zapisz na przykład jako „some_script.py”. Następnym razem będziesz musiał policzyć wartości komórek, otwórz konsolę python w QGIS, naciśnij przycisk „pokaż edytor” i otwórz tam ten skrypt. Następnie zamień „raster_path” w czwartym wierszu skryptu na rzeczywistą ścieżkę do rastra i zapisz zmiany. Następnie uruchom skrypt i w wynikach konsoli (po lewej stronie edytora na zrzucie ekranu poniżej) zobaczysz liczbę komórek dla każdej wartości, którą masz w rastrze.
Pamiętaj, że aby skrypt działał, musisz zainstalować Python-Numpy.
EDYCJA: Ponadto, jeśli nie potrzebujesz dokładnych wartości, ale wolisz zobaczyć rozkład wartości, możesz zastosować opisane tutaj podejście .
EDYCJA 2: udostępniono bardziej zaawansowaną wersję skryptu. Teraz działa z wielopasmowymi rastrami i przetwarza wartości NaN.
from osgeo import gdal
import sys
import math
path = "raster_path"
gdalData = gdal.Open(path)
if gdalData is None:
sys.exit( "ERROR: can't open raster" )
# get width and heights of the raster
xsize = gdalData.RasterXSize
ysize = gdalData.RasterYSize
# get number of bands
bands = gdalData.RasterCount
# process the raster
for i in xrange(1, bands + 1):
band_i = gdalData.GetRasterBand(i)
raster = band_i.ReadAsArray()
# create dictionary for unique values count
count = {}
# count unique values for the given band
for col in range( xsize ):
for row in range( ysize ):
cell_value = raster[row, col]
# check if cell_value is NaN
if math.isnan(cell_value):
cell_value = 'Null'
# add cell_value to dictionary
try:
count[cell_value] += 1
except:
count[cell_value] = 1
# print results sorted by cell_value
for key in sorted(count.iterkeys()):
print "band #%s - %s: %s" %(i, key, count[key])
Jest to o wiele łatwiejsze niż używanie pętli. Można uzyskać liczbę bezpośrednio za pomocą numpy : count = dict(zip(*numpy.unique(a, return_counts=True))). Jednak może być konieczne upewnienie się, że używasz 64-bitowego języka Python, aby uniknąć błędów pamięci. Chociaż nie testowałem, jak to działa NaN.
EDYCJA 3 : Przekształciłem poniższy kod w całkiem użyteczny skrypt SEXTANTE, który daje następujące wyniki:
Szczegółowa instrukcja i link do pobrania można znaleźć tutaj .
Do tego zadania możesz użyć konsoli Python. Skopiuj poniższy kod, wklej go do pliku tekstowego i zapisz na przykład jako „some_script.py”. Następnym razem będziesz musiał policzyć wartości komórek, otwórz konsolę python w QGIS, naciśnij przycisk „pokaż edytor” i otwórz tam ten skrypt. Następnie zamień „raster_path” w czwartym wierszu skryptu na rzeczywistą ścieżkę do rastra i zapisz zmiany. Następnie uruchom skrypt i w wynikach konsoli (po lewej stronie edytora na zrzucie ekranu poniżej) zobaczysz liczbę komórek dla każdej wartości, którą masz w rastrze.
Pamiętaj, że aby skrypt działał, musisz zainstalować Python-Numpy.
EDYCJA: Ponadto, jeśli nie potrzebujesz dokładnych wartości, ale wolisz zobaczyć rozkład wartości, możesz zastosować opisane tutaj podejście .
EDYCJA 2: udostępniono bardziej zaawansowaną wersję skryptu. Teraz działa z wielopasmowymi rastrami i przetwarza wartości NaN.
źródło
count = dict(zip(*numpy.unique(a, return_counts=True)))
. Jednak może być konieczne upewnienie się, że używasz 64-bitowego języka Python, aby uniknąć błędów pamięci. Chociaż nie testowałem, jak to działaNaN
.