我有一个由线(道路)组成的简单要素对象,我想从中创建一个栅格,其中每个单元格代表到最近线的距离。就我而言,是一个带有到最近道路距离的栅格。
这是一个简单的多行 sf 对象:
library(sf)
#Code for multi-line string creation in sf
s1 <- rbind(c(0,3),c(0,4),c(1,5),c(2,5))
s2 <- rbind(c(0.2,3), c(0.2,4), c(1,4.8), c(2,4.8))
s3 <- rbind(c(0,4.4), c(0.6,5))
#sf multi-line string
mls <- st_multilinestring(list(s1,s2,s3))
但是,我有一个额外的标准,我希望留在
terra
或 sf
生态系统中,因为我已经在使用这些生态系统,并且我正在尝试限制我的依赖项数量。我已经找到了使用 starsExtra
的解决方案,但我怀疑这个问题在 terra
或
sf
中完全有可能,而且它可能会更有效一些,因为我的实际多行对象很大。这是
starsExtra
解决方案:
library(sf)
library(stars)
library(starsExtra)
# Make grid
r <- make_grid(mls, res = 0.01)
d <- dist_to_nearest(r, mls, progress = FALSE)
# Plot
plot(d, breaks = "equal", axes = TRUE, reset = FALSE)
plot(st_geometry(mls), add = TRUE)
sf
或
terra
中是否有
starsExtra::dist_to_nearest
的同义词?或者用另一种方法来完成同样的事情?
s1 <- rbind(c(0,3),c(0,4),c(1,5),c(2,5))
s2 <- rbind(c(0.2,3), c(0.2,4), c(1,4.8), c(2,4.8))
s3 <- rbind(c(0,4.4), c(0.6,5))
library(terra)
v <- vect(list(s1,s2,s3), "lines", crs="local") |> aggregate()
r <- rast(v, res = 0.01)
r <- rasterize(v, r)
d <- distance(r)