Wie kann ich bei einem Begrenzungsrahmen die Anzahl bestimmter Werte (z. B. interessiert mich die Anzahl value == 1
) in einem Raster in 1) arcpy oder 2) Rasterpaket in R zählen?
11
In R
Verwenden Sie crop
die Werte und (zu extrahieren zB ) , table
sie zu zählen.
Erstellen wir als Beispiel ein 1-Grad-Raster, das den Globus abdeckt:
library(raster)
x.raster <- raster(outer(179:0, 0:359, `+`), xmn=-180, xmx=180, ymn=-90, ymx=90)
Der Begrenzungsrahmen wird in ein extent
Objekt konvertiert, um Folgendes zu verwenden crop
:
y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)
Danach ist die Tabellierung einfach:
table(getValues(y.raster))
In dieser Ausgabe listet die erste Zeile die Werte und die zweite die entsprechenden Zählungen auf:
165 166 167 ... 257 258
1 2 3 ... 2 1
Zur Kontrolle können wir das Raster und den Umfang zeichnen:
plot(x.raster)
plot(y.extent, add=T)
Ein kleiner Zusatz: Sie können auch die (speichersichere) Funktion "freq" verwenden:
Nach der Antwort von whuber:
library(raster)
x.raster <- raster(outer(179:0, 0:359, '+'), xmn=-180, xmx=180, ymn=-90, ymx=90)
y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)
Aber jetzt mach:
freq(y.raster)
Dies ist nur für sehr große Objekte von Bedeutung (Raster in Datei). 'freq' gibt eine zweispaltige Matrix (Wert / Anzahl) zurück, während 'table' eine Tabelle zurückgibt.
crop
Operation für ein einminütiges Gitter geplant, das die Erde abdeckt: Es hat 10800 Zeilen und 21600 Spalten (233.280.000 Zellen). Die Ernte wurde in insgesamt 1,36 Sekunden verstrichener Zeit ausgeführt.v <- extract(x.raster, y.extent)
gefolgt vontable(v)
extract
? Es ist nicht Teil vonraster
und dasR
Hilfesystem (??
) findet auch keine Funktion mit diesem Namen.