Zählen Sie den Rasterwert in einem Begrenzungsrahmen (räumliche Ausdehnung).

11

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?

Gesehen
quelle

Antworten:

10

In RVerwenden Sie cropdie Werte und (zu extrahieren zB ) , tablesie 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 extentObjekt 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)

Karte

whuber
quelle
3

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.

Robert Hijmans
quelle
Gibt es überhaupt nur eine räumliche Abfrage, anstatt das Bild zuzuschneiden? Das Zuschneiden kann für die Verarbeitung sehr langsam sein.
Gesehen
1
Das Zuschneiden sollte sehr schnell gehen. Als Test habe ich die cropOperation 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.
whuber
Ich denke auch, dass es schnell sein sollte, aber Sie könnten das Obige mit dieser räumlichen Abfrage vergleichen: v <- extract(x.raster, y.extent) gefolgt von table(v)
Robert Hijmans
1
Robert, aus welcher Bibliothek kommt das extract? Es ist nicht Teil von rasterund das RHilfesystem ( ??) findet auch keine Funktion mit diesem Namen.
whuber
Es ist eine Funktion im Rasterpaket. ? Extrakt zeigt , dass (zumindest für mich ist es der Fall ist)
Robert Hijmans