Создать полигоны экстента и границы данного растра в R

13

Я хочу создать два полигона.

  1. Один из прямоугольных размеров моего растра. Я знаю, что могу получить степень использования растра, r <- raster("band5.tif") e <- extent(r) plot(e)дает мне это: введите описание изображения здесь

  2. Как я могу создать один полигон границы растра, как показано ниже?

Вот как выглядит мой растр:растра ( "band5.tif")

csheth
источник

Ответы:

22

Вот пример.

library(raster)
# example data
x <- raster(system.file("external/test.grd", package="raster"))

Чтобы получить прямоугольную степень

e <- extent(x)
# coerce to a SpatialPolygons object
p <- as(e, 'SpatialPolygons')  

Чтобы получить многоугольник, который окружает ячейки, которые не являются NA

# make all values the same. Either do
r <- x > -Inf
# or alternatively
# r <- reclassify(x, cbind(-Inf, Inf, 1))

# convert to polygons (you need to have package 'rgeos' installed for this to work)
pp <- rasterToPolygons(r, dissolve=TRUE)

# look at the results
plot(x)
plot(p, lwd=5, border='red', add=TRUE)
plot(pp, lwd=3, border='blue', add=TRUE)
Роберт Хейманс
источник
Я не могу найти документацию по r <- r > -Infчасти. Что именно делает? И насколько он отличается от values(r)[!is.na(values(r))] <- 1(который устанавливает все местоположения, которые не являются NA в r в 1).
csheth
3
r > -Infявляется основным R. Пойду c(1,NA,3,NA) > -Infпосмотреть, как это работает. Я добавил альтернативу ( reclassify). Ваша альтернатива работает, но она не подходит для больших объектов.
Роберт Хейманс
Я просто жду, пока мой компьютер обработает rasterToPolygons()деталь, и тогда я оценю ваш ответ. Спасибо за -Infбит, это будет очень полезно!
csheth
Для очень большого растра это может занять некоторое время или даже потерпеть неудачу. В этом случае вы можете сначала рассмотреть вопрос об использовании, aggregateпоскольку вы все равно не увидите разницу.
Роберт Хейманс
Даже с только 100 ячейками после запуска aggregate()он не обрабатывается (компьютер оснащен 16 ГБ ОЗУ). Проблема в том, что мне нужно сохранить границу как можно более родной, поскольку матрицу высот необходимо извлечь из результирующего многоугольника. Если я продолжу понижать частоту моего растра, я потеряю эту границу. Любая работа вокруг?
csheth