Расчет количества пиксельных (кол-во) растровых файлов в R - PullRequest
0 голосов
/ 04 июня 2018

У меня есть огромное количество растровых файлов и многоугольник, который находится в пределах растровых файлов.Я хочу получить номер пикселя (количество) для каждого растрового файла в пределах многоугольника.Кроме того, я хочу создать таблицу с именем растрового файла и количеством пикселей (в списке) для каждого растрового файла.Я пытался с укладкой, но с этим я не могу отследить название.Есть ли другой способ выполнить эту задачу в R?

1 Ответ

0 голосов
/ 04 июня 2018

Всегда включайте пример данных, пожалуйста

library(raster)
fn <-system.file("external/rlogo.grd", package="raster")
s <- stack(fn)
s[[1]][1:5000] <- NA
s[[2]][5001:ncell(s)] <- NA
names(s)
#[1] "red"   "green" "blue" 
p <- rbind(c(5,20), c(25,55), c(50, 20), c(20,6), c(5,20))
pol <- spPolygons(p)

plot(s, addfun=function() lines(pol, lwd=2))

Я не совсем уверен, что вы ищете.Количество ячеек (пикселей) будет одинаковым для всех растров, если вы можете сложить их (что, как вы говорите, вы можете).Я предполагаю, что вы хотите сумму ячеек, которые не NA.Если у вас на самом деле есть растры с другим происхождением / разрешением, вы можете повторить эти шаги, но нет необходимости укладывать их в RasterStack, но вам нужно будет изменить подход, чтобы также подсчитать ячейки NA.

Простой подход для небольших объектов:

m <- mask(s, pol)
cellStats(m, function(i, ...) sum(!is.na(i)))
# red green  blue 
# 600   506  1106 

Если для этого не хватает памяти, вы можете сделать:

m <- mask(s, pol)
x <- reclassify(m, cbind(-Inf, Inf, 1))
names(x) <- names(m)
cellStats(x, 'sum')
#red green  blue 
#600   506  1106 

Вы также можете попробовать:

extract(s, pol, fun=function(x,...)length(na.omit(x)))
#     red green blue
#[1,] 600   506 1106

Если вы хотите сосчитать все ячейки (NA или нет), вы можете сделать что-то вроде

# example RasterLayer
r <- s[[1]]
# this step may help in speed if your polygon is small relative to the raster
r <- crop(r, pol)

x <- rasterize(pol, r, 1)
cellStats(x, 'sum')
#[1] 1106
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...