-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 网格,但没有找到好的解决方案。
非常感谢,希望你能帮我解决这个问题!
参考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)