r - 如何根据经纬度列表从栅格堆栈中提取数据?

标签 r raster

我有一个包含 100 多个文件的光栅堆栈。我想从每个文件中提取特定经纬度位置的值。这为我提供了一个经纬度组合的值列表。

plist <- list.files(pattern = "\\.tif$", include.dirs = TRUE)
pstack <- stack(plist)
#levelplot(pstack)

for (i in 1:length(plist))
  t[i]=extract(pstack[[i]], 35,-90)
当我在单独的文件/数据框中拥有经纬度位置时,我该如何为数千个位置执行此操作。我也想在最终列表中保留一个位置 ID:
Lat Long LocID
35 -90   001
35 -95   221
30 -95.4 226
31.5 - 90 776
我的最终目标是拥有这种类型的数据框:
Lat Long LocID value
35 -90   001   0.5
35 -95   221   1.4
30 -95.4 226   2.5
31.5 - 90 776  4.5
虽然如果不可能保留 LocID,那也没关系。
其中一个文件:https://www.dropbox.com/s/ank4uxjbjk3chaz/new_conus.tif?dl=0

从评论中测试解决方案:
latlong<-structure(list(lon = c(-71.506667, -71.506667, -71.506667, -71.215278, 
-71.215278, -71.215278, -71.215278, -71.215278, -71.215278, -71.215278
), lat = c(42.8575, 42.8575, 42.8575, 42.568056, 42.568056, 42.568056, 
42.568056, 42.568056, 42.568056, 42.568056)), .Names = c("lon", 
"lat"), row.names = c(NA, 10L), class = "data.frame")
ext<-extract(pstack,latlong)

Error in UseMethod("extract_") : no applicable method for 'extract_' applied to an object of class "c('RasterStack', 'Raster', 'RasterStackBrick', 'BasicRaster')"


更新 #2:
错误是因为它与另一个包冲突。这有效:
raster::extract(pstack,latlong)

最佳答案

您可以使用 extract函数在 raster图书馆。首先你读入你的数据框并选择 lon , lat列。假设您有 dataframe dat以及 pstack 的栅格堆栈

loc <- dat[,c("long", "lat")]
ext <- extract(pstack, loc)
new_d <- cbind(dat, ext) # bind the extracted values back to the previous dataframe

关于r - 如何根据经纬度列表从栅格堆栈中提取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39988415/

相关文章:

json - R 格式化 JSON 输出的策略

R 在函数内使用临时选项设置

R 工作室 : organize code in section that can be hidden

r - 月-年条形图按年份进行分面和填充;数据输入为字符格式的日期

r - 使用箭头分配函数作为 R purrr map2

r - ggplot2:设置 alpha 值时,光栅绘图无法按预期工作

r - 学习理解plyr、ddply

MATLAB:使用自定义颜色图绘制栅格图

r - 使用 R 中的不同名称保存循环生成的栅格名称

r - 光栅包绘图函数的命名空间问题?