Скомпилируйте несколько растровых извлечений в одну таблицу - PullRequest
0 голосов
/ 01 июня 2019

У меня есть 3 растра, в которых я извлек данные из полилинии из шейп-файла. В настоящее время у меня есть 3 отдельных списка. Есть ли способ сделать извлечение из всех трех растров и скомпилировать их в одну таблицу с разными столбцами для данных из каждого растра?

Это текущий код, который я использую

  Harney_Transects <- readOGR(dsn = ".", layer = "Transect_HN")

  MeanTreeHeightHarneyBefore=raster('HN_TrMean_B_Clip.tif')
  ScanAngleHarneyBefore= raster('HNScanAngle_B_Clip.tif')
  MeanShrubHeightHarneyBefore= raster('HN_MeanShrub_B_Clip.tif')

  Extraction_Shrub_Harney= extract(MeanShrubHeightHarneyBefore,Harney_Transects)
  Extraction_Tree_Harney= extract(MeanTreeHeightHarneyBefore,Harney_Transects)
  Extraction_ScanAngle_Harney= extract(ScanAngleHarneyBefore,Harney_Transects)

1 Ответ

2 голосов
/ 01 июня 2019

Короче говоря, вы можете stack() всех растров, из которых вы хотите извлечь данные, и extract из стека.

Вот полностью воспроизводимый пример использования двух растров и объекта SpatialLines, как у вас в вопросе.Перейдите к последнему фрагменту кода для прямого ответа на ваш вопрос.

library(sp)
library(raster)

# function to generate random rasters
gen_raster <- function(){
  r <- raster(nrows = 10, ncols = 10, res = 1, 
              xmn = 0, xmx = 10, ymn = 0, ymx = 10, 
              vals = rnorm(100, 5, 1))
  return(r)
}

# generate 2 random rasters
r1 <- gen_raster()
r2 <- gen_raster()

# view
par(mfrow = c(1,2))
  plot(r1, main = "raster 1"); plot(r2, main = "raster 2")
dev.off()

enter image description here

# generate transect (`SpatialLines` object)
m <- as.matrix(data.frame(x = 5.5, y = seq(0, 10, 1)))
l <- list(Lines(Line(m), "m"))
l <- SpatialLines(l)

# view the transect
plot(r1, main = "raster 1 with transect"); lines(l)

enter image description here

Работа extract на сложенных растрахвозвращает список с матрицей в нем.Последнее, что вам нужно, это выдвинуть это как data.frame, что немного сложно.

rs <- stack(r1, r2)            # stack any amount of rasters to extract from
re <- extract(rs, l)           # extract at locations `l`
do.call(rbind.data.frame, re)  # convert to data.frame

    layer.1  layer.2
1  4.586890 5.115136
2  4.780503 5.093281
3  6.877302 3.337345
4  5.913230 3.755099
5  4.907834 4.887160
6  5.576908 5.386136
7  3.572350 5.225392
8  4.778727 5.391765
9  6.600041 4.205841
10 6.946321 5.544172

Имена столбцов - это имена растровых слоев в стеке.Вы можете получить доступ к этим именам с помощью names(rs) и изменить их с помощью names(rs) <- c("new_name_1", "new_name_2").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...