【问题标题】:Reduce raster size in R减小 R 中的栅格大小
【发布时间】:2021-10-18 22:48:56
【问题描述】:

我需要对栅格堆栈执行 kmeans 分析,但它是一个非常大的文件 - 目前超过 100 GB,因此程序将返回“无法分配”错误。

在不过多更改数据的情况下,将堆栈大小减小到某个点以下的最佳方法是什么?我可以尝试“重新采样”,但如果我想将其保持在 1GB 以下,我担心从 100GB 开始会丢失太多信息,而且我也不知道重新采样的“多少”。

编辑:也尝试了“memory.limit(size)”技巧,但无济于事。

【问题讨论】:

    标签: r size raster


    【解决方案1】:

    您是否尝试将栅格划分为图块?您可以这样做,然后运行一个循环,在该循环中分别分析每个图块并将每个图块保存在列表中。我做了类似的事情,例如:

        library("sf")
        r = stack(file.path(wdir,"your_raster"))
        crs(r) <- CRS(paste0("+init=epsg:",projectCRS))
        tilegrid = st_as_sf(as(raster::extent(r), "SpatialPolygons"))
        tilegrid = st_as_sf(st_make_grid(tilegrid, cellsize = 5000))
    

    单元格大小由您决定,然后创建列表并开始循环

        raster.list = list()
    
        for(i in 1:nrow(tilegrid) ){
         ss = tilegrid[i,]
         ss = st_buffer(ss, 25, joinStyle="MITRE", endCapStyle = "FLAT") # da 
         r.crop = crop(r, ss)[[1]] 
    

    您在此处对 r.crop 运行分析,并在循环结束时添加 最终栅格(r.final)到列表并关闭循环

        raster.list[[i]] = r.final
        }          
    

    这样做您应该使用较低的数据负载,如果您需要一个唯一的栅格作为最终结果,使用马赛克功能就足够了,我这样做了:

        raster.list$fun = mean
        raster.list$na.rm = TRUE
        final.raster = do.call(raster::mosaic, raster.list)
    

    【讨论】:

    • 感谢您的回复,但我无法让它工作...我在哪里创建 r.final 文件?
    • 在申请分析的周期内。对我来说是这样的: r.final = function(r.crop) 其中 function 是根据您的分析构建的函数
    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 2018-05-06
    • 2019-02-13
    • 2021-04-20
    • 1970-01-01
    • 2022-08-24
    • 2010-11-12
    相关资源
    最近更新 更多