完全に重なり合う 2 つのラスターがあります (範囲とセル サイズが同じ)。1 つのラスター内のすべてのセル (つまり、すべての XY) について、ラスター間の特定のしきい値の差内で最も近いセルまでのユークリッドの地理的距離を決定したいと考えています。
別の言い方をすれば、raster1 と raster2 はいくつかの変数 Z を測定します。私は、Z 値 (t) のしきい値の差を持っています。ラスタ 1 の参照セルごとに、1) abs(Z2-Z1) の Z 値を持つラスタ 2 のすべてのセルを見つける必要があります。
各ラスターには約 2,600 万個のセルがあり、そのうちの約 1,000 万個は非 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)