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
相关产品推荐
相关产品推荐

