我有两个完全重叠的栅格(相同的范围和像元大小)。对于一个栅格中的每个像元(即对于每个 XY),我想确定在栅格之间给定阈值差异内到最近像元的欧几里得地理距离。
换句话说:raster1 和 raster2 测量一些变量 Z。我有一个 Z 值 (t) 的阈值差异,它构成了 raster1 和 raster2 之间的“匹配”值(或“足够接近”)。对于 raster1 中的每个参考像元,我需要 1) 找到 raster2 中 Z 值为 abs(Z2-Z1) 的所有像元
每个栅格有约 2600 万个像元,其中约 1000 万个具有非 NA 值。对于这个问题,我想出了一个基于非栅格的解决方法,但只能通过将栅格转换为 XYZ 表/向量并为每个参考单元格执行循环功能。对于我正在处理的数据大小来说,这在计算上过于密集(需要大约 10 天的时间来处理!)。但是,为了帮助理解我的问题,该代码如下:
library(SDMTools)
c.in <- asc2dataframe("reference.asc"); names(c.in) <- c("X","Y","Z")
f.in <- asc2dataframe("destination.asc"); names(f.in) <- c("X","Y","Z")
x=c.in$X
y=c.in$Y
c=c.in$Z
f=f.in$Z
dist=vector(length=length(c))
threshold <- 0.01
id <- 1:length(c)
for (i in length(id)) {
# First, find all rows within the threshold
t <- id[abs(f-c[i])<threshold]
# Second, find the distance to the closest row
dist[i] <- round(sqrt(min((x[t]-x[i])^2+(y[t]-y[i])^2)))
}
library(raster)
dist.rast <- rasterFromXYZ(x,y,dist)