如何在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逻辑示例图:
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

