我需要工作10分钟(1/12度)的全球网格所有的土地面积。网格是在R中使用软件包(sf)生成的。电网将限于世界陆地地区。进一步的下游分析需要网格ID。生成网格的代码如下:
library(tidyverse)
library(sf)
sf_use_s2(F)
birds <- st_read('BOTW_breeding_valid_union.gpkg') ## This is just an examplary shapefile I use to set a bbox.
bbox <- st_bbox(birds)
bbox[1] <- -180
bbox[2] <- -90
bbox[3] <- 180
bbox[4] <- 90
bbox <- bbox %>% st_as_sfc
grid <- st_make_grid(bbox, cellsize = 1/12) %>% st_as_sf() %>% mutate(grid_ID = row_number())
land <- st_read('ne_10m_land.shp')
land_grids <- st_intersects(grid, land) %>% as.data.frame() %>% rename(grid_ID = row.id)
grid <- grid %>% left_join(land_grids, by = "grid_ID") %>% filter(col.id == "1") %>% select(grid_ID) %>%
st_write('global_10m_grid.gpkg')现在我需要绘制它来检查它和进一步的数据映射(网格将有值)。我使用tmap包:
grid <- st_read('global_10m_grid.gpkg')
bitmap('test_grid.png')
tm_shape(grid) + tm_fill(col = 'red')
dev.off()但是,由于个人计算机上的大小(加载时间非常长,我希望它原则上还没有加载),或者在具有交互式shell的集群(dev.off生成了一个空文件)上,我都在苦苦挣扎。
有什么办法能更有效地策划吗?
发布于 2022-09-28 08:21:15
是的,光栅化确实是解决问题的办法。保持栅格中矢量的分辨率会导致文件小于11 mb,完全可以在我的桌面上正常的RStudio设置中打开。
对于将来的引用,代码如下所示:
g <- st_read('yourfile.gpkg')
library(stars)
g %>% left_join(df, by = 'grp') %>% select(value) %>% st_rasterize(n = 2773927) %>% write_stars('filename.tif')https://stackoverflow.com/questions/73455114
复制相似问题