[英]How can I create a raster mosaic using a raster-stack-list based on the max-values of one specific band?
[英]How can I extract data from a raster stack based on a list of lat long?
我有一个包含 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)
给
UseMethod("extract_") 中的错误:没有适用于 'extract_' 的方法应用于类 "c('RasterStack', 'Raster', 'RasterStackBrick', 'BasicRaster')"
更新#2:
错误是因为它与另一个包冲突。 这有效:
raster::extract(pstack,latlong)
您可以在raster
库中使用extract
功能。 首先,您读入数据框并选择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
我通常不处理这种类型的数据,但如何处理:
library(sp)
library(raster)
library(rgdal)
# coordinate data
coords <- read.table(text = 'Lat Long LocID
35 -90 001
35 -95 221
30 -95.4 226
31.5 -90 776', header = T)
# list of all files
plist <- c('~/Downloads/new_conus.tif', '~/Downloads/new_conus copy.tif')
# image stack
data.images <- stack(plist)
# make a master data frame containing all necessary data
data.master <- data.frame(file = rep(plist, each = nrow(coords)), file.id = rep(1:length(plist), each = nrow(coords)), coords)
此时,我们有一个主数据框,如下所示:
file file.id Lat Long LocID
1 ~/Downloads/new_conus.tif 1 35.0 -90.0 1
2 ~/Downloads/new_conus.tif 1 35.0 -95.0 221
3 ~/Downloads/new_conus.tif 1 30.0 -95.4 226
4 ~/Downloads/new_conus.tif 1 31.5 -90.0 776
5 ~/Downloads/new_conus copy.tif 2 35.0 -90.0 1
6 ~/Downloads/new_conus copy.tif 2 35.0 -95.0 221
7 ~/Downloads/new_conus copy.tif 2 30.0 -95.4 226
8 ~/Downloads/new_conus copy.tif 2 31.5 -90.0 776
现在我们只提取数据框每一行数据对应的值:
# extract values for each row in the master data frame
data.master$value <- NA
for (i in 1:nrow(data.master)) {
data.master$value[i] <- with(data.master, extract(data.images[[file.id[i]]], Lat[i], Long[i]))
}
file file.id Lat Long LocID value
1 ~/Downloads/new_conus.tif 1 35.0 -90.0 1 255
2 ~/Downloads/new_conus.tif 1 35.0 -95.0 221 255
3 ~/Downloads/new_conus.tif 1 30.0 -95.4 226 259
4 ~/Downloads/new_conus.tif 1 31.5 -90.0 776 249
5 ~/Downloads/new_conus copy.tif 2 35.0 -90.0 1 255
6 ~/Downloads/new_conus copy.tif 2 35.0 -95.0 221 255
7 ~/Downloads/new_conus copy.tif 2 30.0 -95.4 226 259
8 ~/Downloads/new_conus copy.tif 2 31.5 -90.0 776 249
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.