gpt4 book ai didi

r - 提取 R 中对应点位置的像素值

转载 作者:行者123 更新时间:2023-12-04 05:30:35 25 4
gpt4 key购买 nike

我有动物 GPS 数据,每天有多个位置,并且在没有记录动物位置的情况下有几天的定期间隔。此外,我有 16 天间隔的卫星数据。我现在想提取像素值 对应于 具体点具体时间 .

这意味着如果记录了动物的位置,例如在拍摄卫星图像前 2 天,我想提取该图像(之后)的像素值,而不是从记录动物位置前 14 天拍摄的图像中提取。我总是想根据时间从更近的图像中提取。

我创建了一些测试数据,希望能说明问题:

library(sp)
library(raster)

### Create test data
# create first raster
edc2012001_m <- raster(ncol=36, nrow=18)
edc2012001_m[] <- sample(1:ncell(edc2012001_m))

# create second raster
edc2012017_m <- raster(ncol=36, nrow=18)
edc2012017_m[] <- sample(1:ncell(edc2012017_m))

rasters<-stack(edc2012001_m,edc2012017_m)

# Create xy coordinates
time<-c("2012-01-01", "2012-01-01", "2012-01-01", "2012-01-02", "2012-01-02", "2012-01-02", "2012-01-12", "2012-01-12", "2012-01-13", "2012-01-13")
x <- rep(-50,10)
y <- sample(c(-80:80), 10)
data<-data.frame(x,y,time)

# Convert data to spatial points data frame
coordinates(data) <- c("x","y")

### Extract all data from raster stack
extract(rasters, data)

第一个栅格名称中的数字字符串表示该图像是在 2012 年的第一天拍摄的,第二个图像是在今年的第 17 天拍摄的。

例如,现在应从第二个光栅文件中提取测试数据中的第 7 个位置,因为它根据时间距离更近。

总而言之,我有 87 个光栅文件和 600 个观测值。我真的不知道如何编程。我想我可以用 substr()从栅格名称中检索日期信息。但除此之外...
我很感激我能得到的每一个提示,也感谢在这种情况下可能有帮助的功能。

最佳答案

从你的最后一行开始

### Extract all data from raster stack
ex <- extract(rasters, data)

# assuming you have these names or something similar
x <- c("edc2012001_m", "edc2012017_m")
year <- as.integer(substr(x, 4, 7))
# day of year
doy <- as.integer(substr(x, 8, 10))
date <- as.Date(doy, origin=paste(year-1, "-12-31", sep=''))
time <- as.Date(time)

# time difference
dif <- t(apply(matrix(as.integer(time)), 1, function(x) x-as.integer(date)))

# smallest time difference
i <- apply(abs(dif), 1, which.min)

# combine rows and columns to select values
v <- ex[cbind(1:nrow(ex),i)]

我得到
> i
[1] 1 1 1 1 1 1 2 2 2 2
> v
[1] 582 578 303 201 201 200 461 329 445 211
>

关于r - 提取 R 中对应点位置的像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12676188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com