因此,使用rasterToPoints为独特的专题类提取SpatialPoints对象。然后使用sp :: spDists函数来查找点之间的距离。
library(raster)
r1 <- raster(nrow=10,ncol=10)
r2 <- raster(nrow=10,ncol=10)
set.seed(1)
r1[] <- ceiling(runif(100,0,10))
r2[] <- ceiling(runif(100,0,10))
dist.class <- NULL
for(i in unique(values(r1))){
p1 <- rasterToPoints(r1, fun=function(xx) xx==i, spatial=T)
p2 <- rasterToPoints(r2, fun=function(xx) xx==i, spatial=T)
dist.class[i] <- min(spDists(p1,p2))
}
cbind(class = unique(values(r1)),dist.class)
循环可能对您没有效率。如果这是一个问题,请将其包装到一个函数中,然后使用它。另外,要小心你的班级,如果他们不是1:10,我的循环将无法工作。如果您的投影在度数,您可能需要geosphere包来获得准确的结果。但在这种情况下,我认为最好的方法是以米为单位进行投影。