You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境下用Raster::reclassify处理CropScapeR数据遇异常求助

问题解决:保存RData后重启R运行raster::reclassify出错

问题根源

tempfile()生成的临时文件仅在当前R会话有效,会话结束后会被系统自动清理。你保存的RasterLayer对象本质是对该临时文件的引用,重启R后文件已不存在,GDAL无法读取数据,进而引发底层C栈溢出错误。

解决方案

1. 改用永久路径保存TIFF文件(推荐)

避免使用临时文件,指定固定路径存储下载的TIFF,确保重启R后文件仍存在:

library(CropScapeR)    
library(httr)    
library(raster)    
library(sf)    

httr::set_config(httr::config(ssl_verifypeer = 0L))    
# 指定永久路径,比如当前工作目录下的文件
tif_file <- "./ST_CDL_2021.tif"    
ST_CDL <- GetCDLData(aoi = '34007', year = 2021, type = 'f', save_path = tif_file)    

# 保存RData(此时RasterLayer引用的是永久路径文件)
save(ST_CDL, file = "ST_CDL.RData")

重启R后加载RData,直接运行重分类即可,GDAL能找到对应的TIFF文件。

2. 将栅格数据加载到内存后保存(适合小栅格)

如果栅格数据量不大,用readAll()把数据读入内存,保存RData时会包含实际数据,不依赖外部文件:

# 下载后将数据读入内存
ST_CDL <- readAll(ST_CDL)
# 保存RData
save(ST_CDL, file = "ST_CDL.RData")

重启R加载后,无需依赖外部文件,直接运行重分类代码。

3. 重启R后重新读取本地TIFF

若已用永久路径保存TIFF,重启R后可直接读取文件,跳过加载RData的步骤:

library(raster)
# 直接读取本地TIFF文件
ST_CDL <- raster("./ST_CDL_2021.tif")
# 执行重分类
ST_CDL_blueberries <- 
  raster::reclassify(ST_CDL,
                     c(-0.1,241.9,NA,
                       242.1,255.1,NA),
                     progress="text")

补充说明

C栈溢出错误是GDAL无法找到文件后的连锁反应,解决文件路径问题后,该错误会自动消失。优先推荐使用永久路径保存TIFF,既适合大栅格(节省内存),也能避免会话依赖问题。

内容的提问来源于stack exchange,提问作者RobertoAS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:20:32