You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中生成带OS国家格网编码的1-500米精度格网

生成高精度OS国家格网编码并分配ID(R语言实现)

之前我在Stack Overflow提问过如何为1km及以上精度的格网添加OS国家格网编码,现在需要在R中生成1m、5m、10m、50m、100m和500m的高精度格网,并为其分配OS国家格网编码(后续需将点数据与这些格网图层进行叠加分析)。

我不确定实现此需求的最佳方式,认为栅格方案可能可行,但对该方案不太熟悉,希望获取解决思路。目前我仅能完成以下代码:

library(terra)

# Define the extent of the grid
bbox <- c(-100000, 700000, -100000, 1400000)
res <- 50

# Create the grid
grid <- terra::rast(ext=bbox, res=res, crs="+init=epsg:27700")

# Generate unique IDs for each cell
ids <- terra::cellFromRowCol(grid, 1:terra::nrow(grid), 1:terra::ncol(grid))
ids <- sprintf("%03d%03d%s", floor(ids/4000)+1, (ids-1)%%4000+1,
               c("SW", "NW", "NE", "SE")[(floor((ids-1)/4000)+1)%%4+1])

# Set the cell values to the unique IDs
grid[] <- ids

各精度格网的唯一ID规则如下:

  • 1米格网ID:基于单元格左下角坐标,前2位字母代表所属100km格网,接下来5位数字为左下角x坐标的最后5位,再5位数字为左下角y坐标的最后5位。
  • 5米格网ID:基于单元格左下角坐标,前2位字母代表所属100km格网,接下来4位数字为左下角x坐标去掉最后1位后的末尾4位,再4位数字为左下角y坐标去掉最后1位后的末尾4位;为区分ID重复的4个单元格,需在末尾添加SW、SE、NE或NW,从左下角开始逆时针分配。
  • 10米格网ID:基于单元格左下角坐标,前2位字母代表所属100km格网,接下来4位数字为左下角x坐标去掉最后1位后的末尾4位,再4位数字为左下角y坐标去掉最后1位后的末尾4位。
  • 50米格网ID:基于单元格左下角坐标,前2位字母代表所属100km格网,接下来3位数字为左下角x坐标去掉最后2位后的末尾3位,再3位数字为左下角y坐标去掉最后2位后的末尾3位;为区分ID重复的4个单元格,需在末尾添加SW、SE、NE或NW,从左下角开始逆时针分配。
  • 100米格网ID:基于单元格左下角坐标,前2位字母代表所属100km格网,接下来3位数字为左下角x坐标去掉最后2位后的末尾3位,再3位数字为左下角y坐标去掉最后2位后的末尾3位。
  • 500米格网ID:基于单元格左下角坐标,前2位字母代表所属100km格网,接下来2位数字为左下角x坐标去掉最后3位后的末尾2位,再2位数字为左下角y坐标去掉最后3位后的末尾2位;为区分ID重复的4个单元格,需在末尾添加SW、SE、NE或NW,从左下角开始逆时针分配。

ID逻辑示例图:
example of cell ID logic

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:37:06