Sınırlayıcı bir kutudaki raster değerini say (uzamsal boyut)


11

Bir sınırlayıcı kutu value == 1verildiğinde, 1'deki bir rasterdeki belirli değerlerin (sayıyla ilgileniyorum ) sayısını nasıl sayabilirim?

Yanıtlar:


10

İçinde R, cropdeğerleri ayıklamak ve ( örneğin ) tablesaymak için kullanın.


Örnek olarak, dünyayı kapsayan 1 derecelik bir ızgara oluşturalım:

library(raster)
x.raster <- raster(outer(179:0, 0:359, `+`), xmn=-180, xmx=180, ymn=-90, ymx=90)

Sınırlayıcı kutu extentkullanmak için bir nesneye dönüştürülür crop:

y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)

Bunu yaptıktan sonra, tablolama basittir:

table(getValues(y.raster))

Bu çıktıda ilk satır değerleri listeler ve ikinci satır karşılık gelen sayılarını listeler:

165 166 167 ... 257 258
  1   2   3 ...   2   1

Bir kontrol olarak raster ve kapsamı çizebiliriz:

plot(x.raster)
plot(y.extent, add=T)

harita


3

Küçük bir ek: ayrıca (bellek güvenli) fonksiyonu "freq" kullanabilirsiniz:

Whuber'ın cevabını takiben:

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)

Ama şimdi yap:

freq(y.raster)

Yalnızca çok büyük nesneler için önemlidir (dosyadaki tarama). 'freq' iki sütunlu bir matris (değer / sayı) döndürürken, 'table' bir tablo döndürür.


zaten görüntüyü kırpma yerine mekansal sorgulama var mı? Kırpma işlemi için çok yavaş olabilir.
Görülme

1
Kırpma çok hızlı olmalı. Bir test olarak, cropdünyayı kapsayan bir dakikalık ızgara için işlemi zamanladım : 10800 satır ve 21600 sütun (233.280.000 hücre) var. Kırpma toplam geçen süre 1.36 saniyede yürütüldü.
whuber

Ben de hızlı olması gerektiğini düşünüyorum, ama yukarı bu uzamsal sorgu ile karşılaştırabilirsiniz: v <- extract(x.raster, y.extent) takip table(v)
Robert Hijmans

1
Robert, hangi kütüphaneden extractgeliyor? Bu bir parçası değildir rasterve Ryardım sistemi ( ??) bu ada sahip bir işlev bulamaz.
whuber

Raster paketindeki bir işlevdir. ? özü gösterir (en azından benim için öyle)
Robert Hijmans
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.