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?

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


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.