我有一个包含 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
函数。首先,您读入数据框并选择 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/