从空间网格多边形生成网格单元 ID(矩阵形式)

发布于 2025-01-10 03:05:38 字数 1251 浏览 1 评论 0 原文

我有一个尺寸为 72 列 × 24 行的空间网格。对于这个问题,我尝试创建一个小的多边形网格(3×3),我希望你也可以在你的电脑上运行。

正如您所看到的,它是一个 3×3 网格,但是网格单元的编号从最后一行的左下角开始到右下角和最后一行。再次从中行左侧继续向右。

library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 7.0.0; sf_use_s2() is TRUE
url = "https://github.com/Ohm-Np/ex-data/raw/main/vector/test_grid.gpkg"
download.file(url, "../grid.gpkg")
grid <- read_sf("../grid.gpkg")
plot(grid)

reprex 包 (v2.0.0)

所以,我的问题是:如何创建另一列(比如说) column_row 并存储从左上向右开始的网格单元 id。

结果如下 (col_number × row_number):

df <- data.frame(column_row = c("01_01", "02_01", "03_01", "01_02", "02_02", "03_02", "01_03", "02_03", "03_03"))
df
#>   column_row
#> 1      01_01
#> 2      02_01
#> 3      03_01
#> 4      01_02
#> 5      02_02
#> 6      03_02
#> 7      01_03
#> 8      02_03
#> 9      03_03

reprex 包于 2022 年 2 月 25 日创建 ( v2.0.0)

I have a spatial grid of dimension 72 col × 24 rows. For this question, I tried to create a small polygon grid (3×3) which I hope you can run in your PC too.

As you can see it is a 3×3 grid, however the numbering of the grid cell starts from bottom left of the last row towards bottom right & again continues from left side of the middle row towards right.

library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 7.0.0; sf_use_s2() is TRUE
url = "https://github.com/Ohm-Np/ex-data/raw/main/vector/test_grid.gpkg"
download.file(url, "../grid.gpkg")
grid <- read_sf("../grid.gpkg")
plot(grid)

Created on 2022-02-25 by the reprex package (v2.0.0)

So, my question is: How to create another column (say) column_row and store the grid cell id which starts from top left towards right.

Result like this (col_number × row_number):

df <- data.frame(column_row = c("01_01", "02_01", "03_01", "01_02", "02_02", "03_02", "01_03", "02_03", "03_03"))
df
#>   column_row
#> 1      01_01
#> 2      02_01
#> 3      03_01
#> 4      01_02
#> 5      02_02
#> 6      03_02
#> 7      01_03
#> 8      02_03
#> 9      03_03

Created on 2022-02-25 by the reprex package (v2.0.0)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧城空念 2025-01-17 03:05:38

这可能是您获得解决方案的一种方式。

tile = 7

col <- tile%%3
row <- 3 - floor(tile/3)
if (tile%%3 == 0) {
  col = 3
  row = row + 1
}

sprintf("%02d_%02d", col, row)
#> [1] "01_01"

reprex 软件包 (v2.0.0) 创建于 2022 年 2 月 28 日

This could be one way you could get to your solution.

tile = 7

col <- tile%%3
row <- 3 - floor(tile/3)
if (tile%%3 == 0) {
  col = 3
  row = row + 1
}

sprintf("%02d_%02d", col, row)
#> [1] "01_01"

Created on 2022-02-28 by the reprex package (v2.0.0)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文