Я пытаюсь извлечь значения батиметрии для интересующей меня области из растрового слоя мировой батиметрии, используя функцию '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 - это список, и я не уверен, как / в какой форме связать эту информацию с моим пространственным многоугольником ...
Спасибо!
Ответы:
Ваша строка
ras_sub0<-rasterize(subarea0,raster_bath)
просто берет порядковый номер полигонов и присваивает его значениям растра.Если вы хотите просто пересечение вашего многоугольника и растра:
Обновление : как отмечает @GodinA, похоже, что intersect () иногда не возвращает растр, который имеет полный экстент многоугольника! Чтобы обойти это, вы можете пересечь с немного большим растром, чем ваш оригинал:
источник
cont <- contour(r3)
тогда.lines(cont)
Разве R не велик?Вот еще одно решение, использующее базовую функцию подмножества в
raster
.источник