我有一个由线(道路)组成的简单要素对象,我想从中创建一个栅格,每个单元代表到最近的线的距离。在我的例子中,栅格与最近的道路的距离。
下面是一个简单的多行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
生态系统中,因为我已经在使用这些生态系统,我试图限制我的依赖数量。我已经找到了a solution using 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
的同义词吗?或者有其他方法来完成同样的事情吗?
1条答案
按热度按时间c86crjj01#
下面是使用Terra实现这一点的方法
字符串
x1c 0d1x的数据
在经度/纬度栅格上计算距离比在平面栅格上慢得多。所以如果你有一个大的经度/纬度栅格,你可以考虑先把它投影到平面CRS上。