我知道我可以从 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")
澄清一下,因为我不想不必要地旋转 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)
或者是希望利用一条线的空间关系(如上所述,以黑色表示)从光栅中提取坐标,然后制作一条线?
另一个更复杂和定制的过程是溶解意大利面 到另一条线(这里绘制上面的 xy_mat,无序)
我认为您会发现
terra
足以满足您的目的。它在很多方面都更简单,因为它不需要 value or r.null
区别,只是一种识别感兴趣的细胞的方法,这些细胞可以在 s
调用之前在 ifel
上执行。