首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绘制大型sf数据

绘制大型sf数据
EN

Stack Overflow用户
提问于 2022-08-23 08:03:19
回答 1查看 37关注 0票数 1

我需要工作10分钟(1/12度)的全球网格所有的土地面积。网格是在R中使用软件包(sf)生成的。电网将限于世界陆地地区。进一步的下游分析需要网格ID。生成网格的代码如下:

代码语言:javascript
复制
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包:

代码语言:javascript
复制
grid <- st_read('global_10m_grid.gpkg')
bitmap('test_grid.png')
tm_shape(grid) + tm_fill(col = 'red')
dev.off()

但是,由于个人计算机上的大小(加载时间非常长,我希望它原则上还没有加载),或者在具有交互式shell的集群(dev.off生成了一个空文件)上,我都在苦苦挣扎。

有什么办法能更有效地策划吗?

EN

回答 1

Stack Overflow用户

发布于 2022-09-28 08:21:15

是的,光栅化确实是解决问题的办法。保持栅格中矢量的分辨率会导致文件小于11 mb,完全可以在我的桌面上正常的RStudio设置中打开。

对于将来的引用,代码如下所示:

代码语言:javascript
复制
g <- st_read('yourfile.gpkg')

library(stars)

g %>% left_join(df, by = 'grp') %>% select(value) %>% st_rasterize(n = 2773927) %>% write_stars('filename.tif')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73455114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档