【发布时间】:2022-11-20 07:30:03
【问题描述】:
我有 25 公里的栅格网格和一个点。如果我在栅格上绘制点,它落在两个相邻栅格像元的边界上。我不知道如何为这个特定案例生成示例数据,但这是我正在处理的内容的可视化。
有什么方法可以检测一组点,像这样的情况有多少点可能非常靠近两个相邻栅格单元的边界?
【问题讨论】:
我有 25 公里的栅格网格和一个点。如果我在栅格上绘制点,它落在两个相邻栅格像元的边界上。我不知道如何为这个特定案例生成示例数据,但这是我正在处理的内容的可视化。
有什么方法可以检测一组点,像这样的情况有多少点可能非常靠近两个相邻栅格单元的边界?
【问题讨论】:
你有栅格范围、尺寸和分辨率,你可以计算像元的坐标,比如
library(terra)
#> terra 1.6.17
r <- rast(nrows=20, ncols=10, xmin=0, xmax=10, ymin = 0, ymax = 10)
for (i in seq_len(nrow(r))) {
for (j in seq_len(ncol(r))) {
if(i %% 2 != 0 & j %% 2 != 0) {
print(paste(i, j))
r[i,j] <- 1
}
}
}
for (i in seq_len(nrow(r))) {
for (j in seq_len(ncol(r))) {
if(i %% 2 == 0 & j %% 2 == 0) {
print(paste(i, j))
r[i,j] <- 1
}
}
}
terra::plot(r, axes = TRUE)
# a few points
p <- rbind(c(1,1), c(2.3,3), c(3, 4), c(5.5,5.5)) |>
terra::vect("points")
terra::plot(p, add = TRUE, pch = 12)
现在计算。尺寸和分辨率:
dim(r)
#> [1] 20 10 1
res(r)
#> [1] 1.0 0.5
让我们计算单元格的坐标(这里只是 X):
xcoords <- vector(mode="list", length=dim(r)[1]-1)
for (i in seq_along(xcoords)) {
xcoords[[i]] <- as.numeric(ext(r)[1])+i*res(r)[1]
}
最后检查哪些点正好位于 xy 坐标上:
xx <- geom(p)[,"x"]
which(xx %in% xcoords)
#> [1] 1 3
有了栅格尺寸,您可以创建对应于网格的线,并进行空间相交,请参阅sf::st_make_grid()。
创建于 2022-11-20 reprex v2.0.2
【讨论】: