【问题标题】:Plotting large sf dataframe绘制大型 sf 数据框
【发布时间】:2022-09-28 16:21:15
【问题描述】:

我需要使用所有陆地区域的 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()

但是,由于个人计算机上的大小(加载时间非常长[或者我希望它原则上尚未加载])或具有交互式外壳的集群(dev.off产生了一个空文件)。

有没有办法更有效地绘制这个?

  • 你试过tmap_mode(\"view\")吗?
  • 现在尝试,但已经运行了大约 15 分钟,仍然没有在 RStudio 中生成绘图。
  • 没运气!还是比较低效,拿不到全局剧情。
  • 您需要网格作为矢量多边形吗?在这种情况下,光栅对象不够吗?您可以将任何数据栅格化为栅格单元并绘制它。

标签: r gis large-data sf tmap


【解决方案1】:

是的,光栅化确实是解决方案。保持光栅中矢量的分辨率会导致文件小于 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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-14
    • 2022-01-17
    • 2013-10-12
    • 2019-03-13
    • 1970-01-01
    • 2016-01-31
    • 2015-07-13
    • 2020-08-14
    相关资源
    最近更新 更多