如何生成所有国家的 10x10km 网格单元?

-1 gis grid r geospatial r-sf

早上好,

我目前正在尝试将国家(无海洋)的 10x10(或 5x5)公里网格单元剪到边界上。例如,请参阅尼日利亚的网格栅格:Nigeria Grid Cells

计划 A:我的计划是采用带有国家边界的 GADM 0 级地图 ( https://gadm.org/data.html ) 并相应地创建网格单元。

虽然 st-grid 命令很简单,但计算起来需要很长时间(尼日利亚 > 30 小时)

 regions <- st_read("data/region/gadm36_0.shp") %>%
 st_transform("+proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs") 
 
grid<- st_make_grid(regions %>%
                           st_union(), cellsize = c(10000, 10000), square = T) 
Run Code Online (Sandbox Code Playgroud)

即使使用 R Studio Pro 服务器,它也需要花费大量时间......

有什么想法可以解决这个问题吗?

计划 B:我的第二个计划是使用https://figshare.com/articles/Global_10_x_10-km_grids_suitable_for_use_in_IUCN_Red_List_of_Ecosystems_assessments_vector_and_raster_format_/4653439 中的 10x10km 网格栅格 并将其剪辑到国家/地区形状文件中。

问题是我无法将栅格数据文件加载到 R 中并使其使用 sf 包中的crop和mask命令运行。有人知道如何运行吗?

计划 C:对于已经存在的国家,是否有 10x10km 的栅格栅格文件?我知道 PRIO 的 50x50 网格,但没有找到好的解决方案。

非常感谢,希望你能帮我解决这个问题!

Mic*_*man 5

参考PLAN A,而不是sf::st_make_grid你可以创建一个栅格,stars::st_as_stars然后用 将其转换为多边形sf::st_as_sf,尼日利亚需要 1-2 秒:

library(sf)
library(stars)
library(rnaturalearth)

# Polygon
world = ne_countries(scale = "small", returnclass = "sf")
world = st_transform(world, "+proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
pol = world[world$sovereignt == "Nigeria", ]

# Make grid
grid = st_as_stars(st_bbox(pol), dx = 10000, dy = 10000)
grid = st_as_sf(grid)
grid = grid[pol, ]

# Plot
plot(st_geometry(grid), axes = TRUE, reset = FALSE)
plot(st_geometry(world), border = "grey", add = TRUE)
plot(st_geometry(pol), border = "red", add = TRUE)
Run Code Online (Sandbox Code Playgroud)

网格

参考PLAN B,可以将 10 公里的栅格导入 R 并使用 package 进行裁剪stars,如下所示:

library(sf)
library(stars)
library(rnaturalearth)

# Raster
r = read_stars("AOOGrid_10x10kmRast/AOOGrid_10x10km.img")

# Polygon
world = ne_countries(scale = "small", returnclass = "sf")
world = st_transform(world, st_crs(r))
pol = world[world$sovereignt == "Nigeria", ]

# Crop
r = r[pol]

# Plot
plot(r, axes = TRUE, reset = FALSE)
plot(st_geometry(world), border = "grey", add = TRUE)
plot(st_geometry(pol), add = TRUE)
Run Code Online (Sandbox Code Playgroud)

光栅