我有一个包含 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)


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

最佳答案

您可以使用 extract 库中的 raster 函数。首先,您读入数据框并选择 lonlat 列。假设您有 dataframe datpstack 的光栅堆栈

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/

10-12 23:33