วิธีการแรสเตอร์ SpatialPolygons ใน R?


10

ฉันกำลังพยายามดึงค่า bathymetry ของพื้นที่ที่ฉันสนใจจากเลเยอร์แรสเตอร์บทกวีโลกโดยใช้ฟังก์ชัน 'rasterize' ในแพ็คเกจ {sp}

* การแก้ไข: ฉันพบฟังก์ชัน 'แยกข้อมูล' ซึ่งดูเหมือนจะเป็นสิ่งที่ฉันกำลังมองหา

นี่คือสิ่งที่ฉันทำไปแล้ว:

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

ป้อนคำอธิบายรูปภาพที่นี่

> 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 

ฉันไม่เข้าใจผลลัพธ์ ทำไมฉันถึงได้รับ 2 สีสำหรับรูปหลายเหลี่ยมแต่ละรูป พวกเขาหมายถึงอะไร?

ในที่สุดฉันจะได้เส้นชั้นความลึกของ bathymetry ได้อย่างไร นี่คือสิ่งที่จะทำอย่างไรกับความละเอียดของฉันหรือเปลี่ยนขนาด?

* การแก้ไข: ตกลงฉันได้ทำสิ่งต่อไปนี้แล้ว:

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

v คือรายการและฉันไม่เงียบแน่นอนว่า / ภายใต้แบบฟอร์มใดที่จะเชื่อมโยงข้อมูลนี้อีกครั้งด้วยรูปหลายเหลี่ยมเชิงพื้นที่ของฉัน ...

ขอบคุณ!


เมื่อคุณพูดว่า 'get bathymetry contour contours' คุณหมายถึงคุณต้องการสร้าง contours หรือไม่
Simbamangu

คำตอบ:


6

บรรทัดของคุณras_sub0<-rasterize(subarea0,raster_bath)เพิ่งจดหมายเลขดัชนีของรูปหลายเหลี่ยมและกำหนดค่านั้นให้กับค่าของแรสเตอร์

หากคุณต้องการเพียงจุดตัดของรูปหลายเหลี่ยมและแรสเตอร์ของคุณ:

subarea0_bathy <- intersect(raster_bath, subarea0)

อัปเดต : เนื่องจาก @GodinA โน้ตดูเหมือนว่า intersect () บางครั้งไม่ส่งคืนแรสเตอร์ที่มีรูปหลายเหลี่ยมที่สมบูรณ์! ในการหลีกเลี่ยงปัญหานี้คุณสามารถตัดกับแรสเตอร์ที่ใหญ่กว่าเดิมเล็กน้อย:

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 ฉันลองใช้คำสั่ง "intersect" อย่างไรก็ตามเมื่อฉันวางแผน subarea0_bathy และ spatialpolygon ของฉัน (subarea0) พวกมันไม่ทับซ้อนกันอย่างสมบูรณ์ทำไมล่ะ เพื่อที่จะตอบคำถามก่อนหน้านี้ใช่ในที่สุดฉันก็อยากได้ contour bathymetry ของฉัน ข้อเสนอแนะใด ๆ
GodinA

ใช่ดูที่ผลลัพธ์จากข้อมูล Bathymetry และรูปหลายเหลี่ยมแทนซาเนียและฉันเห็นผลเหมือนกัน ดูการอัปเดตของฉันด้านบน สำหรับรูปทรงมันเป็นเรื่องง่ายcont <- contour(r3)แล้วlines(cont)R ไม่ยอดเยี่ยมใช่ไหม
Simbamangu

เยี่ยมมากใช่แล้ว R สามารถยอดเยี่ยมได้! ขอบคุณ @Simbamangu งานนี้! อย่างไรก็ตามฉันต้องการพล็อต Spatialpolygons ที่มีเส้นชั้นความลึกของฉันเท่านั้น อาจสร้าง SpatialPolygonsDataframe หรือไม่? เมื่อใช้จุดตัดฉันจะได้รับข้อมูลสำหรับทั้งสแควร์ที่ครอบคลุม Spatialpolygons ของฉัน ฉันจำเป็นต้องรวม Spatialpolygons ของฉันเข้ากับส่วนลึกของฉัน แต่ไม่แน่ใจว่าจะทำอย่างไร นี่คือเหตุผลที่ฉันคิดว่าฟังก์ชั่น 'ดึงข้อมูล' เป็นการเริ่มต้นที่ดี แต่ฉันจบลงด้วยรายการของความลึกที่ฉันไม่แน่ใจว่าฉันสามารถ rebind ด้วย spatialPolygons ของฉันได้อย่างไรความคิดใดบ้าง ขอบคุณอีกครั้ง!
GodinA

สิ่งที่คุณต้องการที่จะจบลงด้วย? Contours (SpatialLines) ที่ทับซ้อนกับ subarea0 ของคุณหรือไม่ คุณอาจต้องการเริ่มต้นคำถามใหม่เนื่องจากตอนนี้จะเกินกว่าเดิม
Simbamangu

ใช่ฉันต้องการเพียง subarea0 ของฉันที่มี contour เชิงลึกสำหรับพื้นที่กำหนดนี้: gis.stackexchange.com/questions/25112//
GodinA

1

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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.