Подсчитать значение растра в ограничительной рамке (пространственный экстент)


11

Учитывая ограничивающий прямоугольник, как я могу подсчитать количество определенных значений (скажем, меня интересует количество value == 1) в растре в 1) arcpy или 2) растровом пакете в R?

Ответы:


10

В Rиспользуется cropдля извлечения значений и ( например ) , tableчтобы сосчитать их.


В качестве примера, давайте создадим сетку в 1 градус, охватывающую земной шар:

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

Ограничительная рамка преобразуется в extentобъект для использования crop:

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

Сделав это, табуляция проста:

table(getValues(y.raster))

В этих выходных данных первая строка перечисляет значения, а вторая перечисляет их соответствующие значения:

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

В качестве проверки мы можем построить растр и экстент:

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

карта


3

Небольшое дополнение: вы также можете использовать (безопасную для памяти) функцию "freq":

После ответа 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)

Но теперь сделайте:

freq(y.raster)

Это имеет значение только для очень больших объектов (растр в файле). 'freq' возвращает матрицу из двух столбцов (значение / количество), тогда как 'table' возвращает таблицу.


есть ли вообще просто выполнить пространственный запрос, а не обрезать изображение? Обрезка может быть очень медленной для обработки.
видно

1
Обрезка должна быть очень быстрой. В качестве теста я рассчитал cropоперацию для одной минуты сетки, охватывающей Землю: она имеет 10800 строк и 21600 столбцов (233 280 000 ячеек). Обрезка была выполнена за 1,36 секунды.
whuber

Я также думаю, что это должно быть быстро, но вы могли бы сравнить вышеупомянутое с этим пространственным запросом: v <- extract(x.raster, y.extent) затем table(v)
Роберт Хейманс

1
Роберт, из какой библиотеки extract? Он не является частью, rasterи Rсправочная система ( ??) также не находит никакой функции с этим именем.
whuber

Это функция в растровом пакете. Извлечение показывает, что (по крайней мере, для меня это)
Роберт Хейманс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.