Як розтерзати просторові полігони в R?


10

Я намагаюся витягнути значення батиметрії моєї цікавої області із світового растрового шару батиметрії, використовуючи функцію '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 кольори для кожного зі своїх багатокутників? Що вони означають?

Як я можу в кінцевому підсумку отримати контур глибини батиметрії? Це щось стосується моєї роздільної здатності чи зміни розмірів?

* Редагує: добре, зараз я зробив наступне:

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

v - це список, і я не спокійно впевнений, як / під якою формою відновити цю інформацію з мого просторового багатокутника ...

Дякую!


Коли ви говорите «отримати контур глибини батиметрії», ви маєте на увазі, що хочете також генерувати контури?
Сімбамангу

Відповіді:


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, я спробував команду "перетинатися", однак, коли я будую сюжет0_bathy та мій просторовий полігон (subarea0), вони не перетинаються повністю, чому? Щоб відповісти на ваше попереднє запитання, так, я хотів би, зрештою, також мати свій контур батиметрії. Будь-які пропозиції?
GodinA

Так, подивився на вихід даних батиметрії та полігон Танзанії, і я бачу той самий ефект. Дивіться моє оновлення вище. Для контурів це так просто, як cont <- contour(r3)тоді lines(cont).
Сімбамангу

Чудово, так R може бути фантастичним! Дякую @Simbamangu, це працює! Однак я хотів би побудувати мої просторові полігони лише моїм глибинним контуром. Може створити просторовий полігонDataframe? Використовуючи перехрестя, я отримую інформацію про всю площу, що охоплює мої Просторові полігони. Мені потрібно якось поєднати мої Просторові полігони з моїм контуром глибини, але не знаю, як це зробити. Ось чому я подумав, що функція «витяг» - вдалий початок, але я закінчую глибиною списку, що я не впевнений, як я можу відновити свої просторові полігони ... Будь-які ідеї? Знову дякую!
GodinA

Що ти хочеш закінчити? Контури (просторові лінії), які перекриваються з вашою підмагістраллю0? Ви можете почати нове запитання, оскільки це зараз виходить за рамки оригіналу.
Сімбамангу

Так, я хотів би отримати свій підрайон0 з контуром глибини для цієї області визначення: 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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.