Я хотел бы извлечь значения из растрового стека в несколько файлов sf-точек. Растровый стек, с которым я работаю, представляет ежедневные данные о погоде, а файлы sf-точек представляют собой следы лесного пожара с атрибутом, соответствующим дню, когда точка сгорела. Я хотел бы извлечь данные о погоде в эти файлы точек, в частности извлекать данные о погоде за день, когда точка была сожжена.
Я добился определенного прогресса в переименовании имен слоев растрового стека в юлианский день, и подмножество растрового стека в день интереса. Как оказалось, мне нужно преобразовать объект sf в пространственный объект, чтобы заставить raster::extract
работать. Действительно сложная часть состоит в том, чтобы поднастроить растровый стек на основе дня записи для каждой точки .
. Я могу как-то увидеть, как я мог бы выполнить итерацию через sf
точечный объект и rbind
результатов, но действительно ли этот колоссальный l oop действительно единственный способ заставить это работать?
library(raster)
library(sf)
library(rgdal)
library(lubridate)
Далее я складываю растры, которые являются Ar c Grids.
fwi.list <- list.files(path = "C:/Example/", pattern="fwi")
fwi.stack <- stack(fwi.list)
crs(fwi.stack) <- "+proj=lcc +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
print(fwi.stack)
class : RasterStack
dimensions : 1600, 1900, 3040000, 153 (nrow, ncol, ncell, nlayers)
resolution : 3000, 3000 (x, y)
extent : -2600000, 3100000, -885076, 3914924 (xmin, xmax, ymin, ymax)
crs : +proj=lcc +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
names : X121, X122, X123, X124, X125, X126, X127, X128, X129, X130, X131, X132, X133, X134, X135, ...
min values : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
max values : 1138, 681, 690, 662, 873, 618, 417, 893, 440, 511, 805, 522, 575, 543, 540, ...
Вот точечный файл sf
. Хитрость заключается в том, чтобы назначить fwi каждой точке на основе jday attre
GRID.PT <- st_read("C:/Example/470_2015.shp")
GRID.PT
Simple feature collection with 2126 features and 1 field
geometry type: POINT
dimension: XY
bbox: xmin: -1039086 ymin: 2078687 xmax: -1015336 ymax: 2095187
epsg (SRID): NA
proj4string: +proj=lcc +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
First 10 features:
geometry DOB
1 POINT (-1026836 2095187) 183
2 POINT (-1026336 2095187) 183
3 POINT (-1026086 2095187) 183
4 POINT (-1025836 2095187) 183
5 POINT (-1027336 2094937) 183
6 POINT (-1027086 2094937) 183
7 POINT (-1026836 2094937) 183
8 POINT (-1026586 2094937) 183
9 POINT (-1026086 2094937) 183
10 POINT (-1025836 2094937) 183
Итак, как мне go об этом? Я уверен, что это включает raster::subset
и raster::extract
, может быть что-то вроде: extract(subset(fwi.stack, paste0("X", GRID.PT$DOB[x])), as(GRID.PT, "Spatial"))
Но я должен написать это как функцию и использовать lapply
? Или я должен использовать большой l oop? Спасибо за вашу помощь, ТАК.