R 中是否有类似于 GIS 细化算法(例如 r.thin、GRASS GIS)的栅格对象细化或骨架化算法?

问题描述 投票:0回答:1

我知道我可以从 rgrass7 包中的 GRASS GIS 执行 r.thin,但我不想为此任务建立一个草地 GIS 环境。那么R中还有其他解决方案吗?

小例子,所需的输出将是黑线:

library(raster)
#create synthetic raster
values<-c(1:10000)
r <- raster(ncol=100, nrow=100, xmn=0, xmx=100, ymn=0, ymx=100)
r[]<-0
r[]<-ifelse(values>4500 & values<5501,1,0)
plot(r)
lines(c(0,100),c(50,50),col="black")
r r-raster
1个回答
0
投票

澄清一下,因为我不想不必要地旋转 GRASS 7

library(terra)
set.seed(42)
s <- rast(matrix(1:10000, nrow = 100, ncol = 100, byrow = TRUE))
s <- ifel(s > 4500 & s < 5501, 1, 0)
xy_mtx <- xyFromCell(s, sample(4550:5501, 10))
xy_ord <- xy_mtx[order(xy_mtx[, 1]), ]
plot(s)
plot(vect(xy_ord, type = 'lines'), col = 'blue', add = TRUE)

或者是希望利用一条线的空间关系(如上所述,以黑色表示)从光栅中提取坐标,然后制作一条线?

sample based line on raster

另一个更复杂和定制的过程是溶解意大利面 到另一条线(这里绘制上面的 xy_mat,无序)

enter image description here

我认为您会发现

terra
足以满足您的目的。它在很多方面都更简单,因为它不需要
value or r.null
区别,只是一种识别感兴趣的细胞的方法,这些细胞可以在
s
调用之前在
ifel
上执行。

© www.soinside.com 2019 - 2024. All rights reserved.