Buat poligon sejauh dan batas Raster yang diberikan dalam R

13

Saya ingin membuat dua poligon.

  1. Salah satunya adalah bentuk persegi panjang raster saya. Saya tahu saya bisa mendapatkan tingkat raster menggunakan r <- raster("band5.tif") e <- extent(r) plot(e)memberi saya ini: masukkan deskripsi gambar di sini

  2. Bagaimana saya bisa membuat SATU poligon dari batas raster seperti yang ditunjukkan di bawah ini?

Seperti inilah rupa raster saya:raster ("band5.tif")

csheth
sumber

Jawaban:

22

Berikut ini sebuah contoh.

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

Untuk mendapatkan luas persegi panjang

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

Untuk mendapatkan poligon yang mengelilingi sel yang bukan 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)
Robert Hijmans
sumber
Sepertinya saya tidak dapat menemukan dokumentasi di r <- r > -Infbagian ini. Apa sebenarnya yang dilakukannya? Dan betapa berbedanya dari itu values(r)[!is.na(values(r))] <- 1(yang menetapkan semua lokasi yang tidak NA dalam r ke 1).
csheth
3
r > -Infadalah dasar R. Lakukan c(1,NA,3,NA) > -Infuntuk melihat cara kerjanya. Saya telah menambahkan alternatif ( reclassify). Alternatif Anda berfungsi tetapi itu tidak bagus untuk objek besar.
Robert Hijmans
Saya hanya menunggu komputer saya memproses rasterToPolygons()bagian itu, dan setelah itu saya akan mengevaluasi jawaban Anda. Terima kasih atas -Infbitnya, ini akan sangat berguna!
csheth
Untuk raster yang sangat besar, ini akan memakan waktu cukup lama, atau bahkan gagal. Dalam hal ini Anda dapat mempertimbangkan untuk menggunakannya terlebih dahulu aggregatekarena Anda tidak akan melihat perbedaannya.
Robert Hijmans
Bahkan dengan hanya 100 sel setelah menjalankan aggregate()r, ia belum diproses (komputer dilengkapi dengan 16 GB RAM). Masalahnya adalah saya harus menjaga batas sebagai asli semampu saya, karena DEM perlu diekstraksi dari poligon yang dihasilkan. Jika saya lebih jauh mencicipi sampel raster saya, saya akan kehilangan batas itu. Ada yang bekerja?
csheth