Bagaimana cara merasterisasi SpatialPolygons di R?

10

Saya mencoba untuk mengekstrak nilai-nilai batimetri area yang saya minati dari lapisan raster batimetri dunia menggunakan fungsi 'rasterize' dalam paket {sp}.

* Suntingan: Saya menemukan fungsi 'ekstrak' yang tampaknya lebih seperti yang saya cari.

Inilah yang telah saya lakukan sejauh ini:

> class(subarea0) #This is my area of interest (Eastern Canadian Arctic Sea)
[1] "SpatialPolygons"
attr(,"package")
[1] "sp"

> extent(subarea0)
class       : Extent 
xmin        : -82.21997 
xmax        : -57.21667 
ymin        : 60.2 
ymax        : 78.16666

library(marelac)
data("Bathymetry")#World bathymetric data in library (marelac)
names(Bathymetry);class(Bathymetry);str(Bathymetry)
[1] "x" "y" "z"
[1] "list"
List of 3
 $ x: num [1:359] -180 -179 -178 -177 -176 ...
 $ y: num [1:180] -89.5 -88.5 -87.5 -86.5 -85.5 ...
 $ z: num [1:359, 1:180] 2853 2873 2873 2873 2873 ...

  raster_bath<-raster(Bathymetry)#Transformed into a raster layer
    extent(raster_bath) <- extent(subarea0)#Transform the extend of my raster to the extend of my SpatialPolygons

>ras_sub0<-rasterize(subarea0,raster_bath)#rasterize my SpatialPolygons (*Edits: not the function that I need here, but I am still interested to learn what results mean)
Found 2 region(s) and 10 polygon(s)
> plot(ras_sub0)
> plot(subarea0, add=TRUE)

masukkan deskripsi gambar di sini

> ras_sub0
class       : RasterLayer 
dimensions  : 180, 359, 64620  (nrow, ncol, ncell)
resolution  : 0.06964709, 0.0998148  (x, y)
extent      : -82.21997, -57.21667, 60.2, 78.16666  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=WGS84 
values      : in memory
min value   : 1 
max value   : 2 
layer name  : layer 

Saya tidak mengerti hasilnya. Mengapa saya mendapatkan 2 warna untuk setiap poligon saya? Apa yang mereka maksud?

Bagaimana akhirnya saya bisa mendapatkan kontur kedalaman batimetri? Apakah ini ada hubungannya dengan resolusi saya atau mengubah dimensi?

* Suntingan: ok, sekarang saya telah melakukan yang berikut:

v <- extract(raster_bath, subarea0)#Extract data from my Raster Layer for the locations of my SpatialPolygons

v adalah daftar dan saya tidak yakin bagaimana / dalam bentuk apa untuk me-rebind info ini dengan poligon spasial saya ...

Terima kasih!

GodinA
sumber
Ketika Anda mengatakan 'dapatkan kontur kedalaman batimetri', apakah Anda bermaksud membuat kontur?
Simbamangu

Jawaban:

6

Baris Anda ras_sub0<-rasterize(subarea0,raster_bath)hanya mengambil nomor indeks poligon dan menetapkannya ke nilai-nilai raster.

Jika Anda hanya ingin memotong poligon dan raster:

subarea0_bathy <- intersect(raster_bath, subarea0)

Pembaruan : Seperti yang dicatat @GodinA, sepertinya intersect () terkadang tidak mengembalikan raster yang memiliki poligon lengkap! Untuk menyiasatinya, Anda dapat memotong dengan raster yang sedikit lebih besar dari aslinya:

r2 <- raster() # create a generic raster
extent(r2) <- extent(subarea0) + 1 # add 1 degree of extent (0.5 each side)
r3 <- intersect(raster_bath, r2) 
Simbamangu
sumber
Terima kasih @imbamangu, saya mencoba perintah "intersect", namun ketika saya merencanakan subarea0_bathy dan spatialpolygon saya (subarea0), mereka tidak tumpang tindih sepenuhnya, mengapa? Untuk menjawab pertanyaan Anda sebelumnya, ya saya ingin akhirnya juga memiliki kontur batimetri saya. Ada saran?
GodinA
Ya, melihat output dari data batimetri dan poligon Tanzania dan saya melihat efek yang sama. Lihat pembaruan saya di atas. Untuk kontur, semudah cont <- contour(r3)itu, lines(cont)bukankah R hebat?
Simbamangu
Bagus, ya R bisa jadi fantastis! Terima kasih @imbamangu, ini berhasil! Namun, saya hanya ingin plot Spatialpolygons saya dengan kontur kedalaman saya. Mungkin membuat SpatialPolygonsDataframe? Menggunakan intersect, saya mendapatkan info untuk seluruh kotak yang mencakup Spatialpolygons saya. Saya perlu menggabungkan Spatialpolygons saya dengan kontur kedalaman saya, tetapi tidak yakin bagaimana melakukannya. Inilah mengapa saya berpikir bahwa fungsi 'ekstrak' adalah awal yang baik, tetapi saya berakhir dengan daftar kedalaman yang saya tidak yakin bagaimana saya bisa memberontak dengan spatialPolygons saya ... Ada ide? Terima kasih lagi!
GodinA
Anda ingin berakhir dengan apa? Kontur (SpatialLines) yang tumpang tindih dengan subarea0 Anda? Anda mungkin ingin memulai pertanyaan baru karena ini sekarang melampaui yang asli.
Simbamangu
Ya, saya hanya ingin mendapatkan subarea0 saya dengan kontur kedalaman untuk area definisi ini: gis.stackexchange.com/questions/25112/…
GodinA
1

Berikut adalah solusi lain, menggunakan fungsi subset dasar di raster.

# create a raster with the dimensions that you are interested in.
r <- raster(extent(subarea0)+1) # +1 to increase the area
res(r) <- 0.1 # you can change the resolution here. 0.1 can be about 10x10 km if you are close to the equator.
crs(r) <- projection(subarea0) # transfer the coordinate system to the raster

# Now you can add data to the cells in your raster to mark the ones that fall within your polygon.
r[subarea0,] <- 1 # this an easy way to subset a raster using a SpatialPolygons object

# check your raster
plot(r)
ssanch
sumber