繁体   English   中英

计算 R 中某个值的点与最近栅格像元的距离

[英]Calculating the distance from points and the closest raster cell of a certain value in R

我正在尝试计算从空间点到特定值/类型的栅格单元的距离。 在我的数据中,每个点代表一棵树,我想知道该点与不同类别的栅格单元(草、森林、不透水表面等)的距离。 我尝试了 distanceFromPoints ,但它返回了一个距离栅格,我感兴趣的是一个数据框,其中包含从每个点到每种土地覆盖类型的最近栅格单元的距离。

#example raster
library(raster)
r <- raster(nrow=100, ncol=100)
r[] <- round(runif(ncell(r),1,4),0)
plot(r)

#example points
x <- c(-110, -50, 25, 150)
y <- c(50, -25, 70, 2)
df <- data.frame(cbind(x,y))
df$n <- c("pt1","pt2","pt3","pt4")

library(sp)
sp <- SpatialPoints(c, proj4string = CRS("+proj=longlat +datum=WGS84 +no_defs"))
plot(sp, add=TRUE)

我想要的 output 是这样的:

    x   y   n   dist.cat1 dist.cat2 dist.cat3 dist.cat4
1 -110  50 pt1        12         3         5         9
2  -50 -25 pt2         1         2         1        27
3   25  70 pt3         4        14        29         5
4  150   2 pt4        23         2        15         2

其中 dist.cat1 表示从点 (n) 到具有类别 1 值的最近栅格像元的距离。

它不漂亮,但你可以做这样的事情。

library(terra)
# simulate raster
r <- raster(nrow=100, ncol=100)
r[] <- round(runif(ncell(r),1,4),0)
# simulate coordinates
x <- c(-110, -50, 25, 150)
y <- c(50, -25, 70, 2)

xy <- cbind(x, y)
out <- list()
for (i in 1:nrow(xy)) {
    d <- distanceFromPoints(r, xy[i,,drop=F])
    out[[i]] <- zonal(d, r, min)[,2]
}
a <- do.call(rbind, out)

b <- cbind(x, y, id=1:4, a)
colnames(b)[4:7] <- paste0("dcat", 1:4)
#        x   y id     dcat1    dcat2     dcat3    dcat4
#[1,] -110  50  1 145303.98 252442.9 331242.16 102200.3
#[2,]  -50 -25  2  57449.51 186127.4 136371.57 138753.8
#[3,]   25  70  3 280556.71 235822.1 110116.94 342537.4
#[4,]  150   2  4 279410.53 161549.5  99779.32 473517.4

这些是从点到 class 的最近单元中心的距离(以 m 为单位)。 因此,除非一个点位于单元格的中心,否则没有零。 如果你愿意,你可以解决这个问题。

你也可以像这样从细胞中心开始

xy <- cbind(x, y)
out <- list()
for (i in 1:nrow(xy)) {
    d <- rasterize(xy[i,,drop=F], r)
    d <- distance(d)
    out[[i]] <- zonal(d, r, min)[,2]
}
a <- do.call(rbind, out)
a 
#         [,1]     [,2]     [,3]     [,4]
#[1,] 200226.1 413979.1 249315.6      0.0
#[2,]      0.0 199349.5 200816.0 199035.8
#[3,] 324904.0 365442.0 142051.4 400308.1
#[4,] 260746.8      0.0      0.0 398093.3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM