【问题标题】:Check if a point lies on the boundary of two raster cells检查点是否位于两个栅格单元的边界上
【发布时间】:2022-11-20 07:30:03
【问题描述】:

我有 25 公里的栅格网格和一个点。如果我在栅格上绘制点,它落在两个相邻栅格像元的边界上。我不知道如何为这个特定案例生成示例数据,但这是我正在处理的内容的可视化。

有什么方法可以检测一组点,像这样的情况有多少点可能非常靠近两个相邻栅格单元的边界?

【问题讨论】:

    标签: r raster terra


    【解决方案1】:

    你有栅格范围、尺寸和分辨率,你可以计算像元的坐标,比如

    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

    【讨论】:

      猜你喜欢
      • 2013-07-18
      • 2015-04-03
      • 1970-01-01
      • 2020-05-30
      • 2022-01-17
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多