Làm thế nào để rasterize SpatialPolygons trong R?


10

Tôi đang cố gắng trích xuất các giá trị độ sâu của khu vực mình quan tâm từ lớp raster độ sâu thế giới bằng cách sử dụng chức năng 'rasterize' trong gói {sp}.

* Chỉnh sửa: Tôi tìm thấy chức năng 'giải nén' có vẻ giống với những gì tôi đang tìm kiếm.

Đây là những gì tôi đã làm cho đến nay:

> 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)

nhập mô tả hình ảnh ở đây

> 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 

Tôi không hiểu kết quả. Tại sao tôi nhận được 2 màu cho mỗi đa giác của mình? Có ý nghĩa gì?

Làm thế nào cuối cùng tôi có thể có được đường viền sâu độ sâu? Đây có phải là một cái gì đó để làm với độ phân giải của tôi hoặc thay đổi kích thước?

* Chỉnh sửa: ok, tôi đã thực hiện như sau:

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

v là một danh sách và tôi không yên tâm chắc chắn làm thế nào / dưới hình thức nào để phản hồi lại thông tin này với đa giác không gian của tôi ...

Cảm ơn bạn!


Khi bạn nói 'lấy đường viền độ sâu của độ sâu', bạn có nghĩa là bạn cũng muốn tạo đường viền?
Simbamangu

Câu trả lời:


6

Dòng của bạn ras_sub0<-rasterize(subarea0,raster_bath)chỉ lấy số chỉ mục của đa giác và gán nó cho các giá trị của raster.

Nếu bạn chỉ muốn giao điểm của đa giác của mình và raster:

subarea0_bathy <- intersect(raster_bath, subarea0)

Cập nhật : Như @GodinA lưu ý, có vẻ như giao nhau () đôi khi không trả về một raster có phạm vi hoàn chỉnh của đa giác! Để giải quyết vấn đề này, bạn có thể giao cắt với một raster lớn hơn một chút so với ban đầu của bạn:

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) 

Cảm ơn bạn ... Để trả lời câu hỏi trước đó của bạn, vâng, cuối cùng tôi cũng muốn có đường viền đo độ sâu của mình. Bất kỳ đề xuất?
GodinA

Vâng, nhìn vào đầu ra từ dữ liệu độ sâu và đa giác Tanzania và tôi thấy hiệu ứng tương tự. Xem cập nhật của tôi ở trên. Đối với đường nét, đó là dễ dàng như cont <- contour(r3)sau đó lines(cont)là không R tuyệt vời?
Simbamangu

Tuyệt vời, vâng R có thể tuyệt vời! Cảm ơn @Simbamangu, điều này hoạt động! Tuy nhiên, tôi chỉ muốn vẽ đồ thị Spatialpolygons của mình với đường viền sâu. Có thể tạo một SpatialPolygonsDataframe? Sử dụng giao nhau, tôi nhận được thông tin cho toàn bộ hình vuông bao gồm Spatialpolygons của tôi. Tôi cần phải bằng cách nào đó kết hợp Spatialpolygons của tôi với đường viền sâu của tôi, nhưng không chắc làm thế nào để làm như vậy. Đây là lý do tại sao tôi nghĩ rằng chức năng 'giải nén' là một khởi đầu tốt, nhưng tôi kết thúc với một danh sách chuyên sâu mà tôi không chắc làm thế nào tôi có thể rebind với spatialPolygons của mình ... Có ý tưởng nào không? Cảm ơn một lần nữa!
GodinA

Bạn muốn kết thúc với cái gì? Đường viền (SpatialLines) trùng với subarea0 của bạn? Bạn có thể muốn bắt đầu một câu hỏi mới vì điều này hiện đang vượt ra ngoài bản gốc.
Simbamangu

Có, tôi chỉ muốn lấy subarea0 của mình với đường viền sâu cho khu vực xác định này: gis.stackexchange.com/questions/25112/ Lỗi
GodinA

1

Đây là một giải pháp khác, sử dụng hàm tập hợp con cơ bản trong 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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.