读取.adf栅格文件时GDAL报错,排除文件损坏后求故障原因
解决R中读取ArcInfo Grid时的GDAL字段信息读取错误
我之前处理ArcInfo Grid格式栅格时也碰到过类似的GDAL属性表读取问题,既然你已经排除了文件损坏的可能,那可以从这几个方向排查:
GDAL版本兼容性问题
不同版本的GDAL对ArcInfo Grid属性表的解析逻辑可能存在差异。如果你最近更新了raster或rgdal包,对应的GDAL版本也可能跟着变更,这就可能导致原本能正常读取的文件突然报错。
你可以先检查当前GDAL版本:library(gdalUtils) gdal_version()如果是刚更新的版本,试试降级到之前能用的GDAL绑定包;或者直接升级到最新稳定版,很多这类小bug都会在新版本里得到修复。
ArcInfo Grid属性表的隐性结构问题
ArcInfo Grid的属性表存在同文件夹下的vat.dbf文件中,虽然你替换了主文件,但如果备份的vat.dbf本身有隐性问题(比如字段名含特殊字符、字段类型不兼容,或者DBF文件内部结构损坏但未影响文件整体完整性),也会触发这个错误。
你可以试试:- 用DBF查看工具(比如LibreOffice Calc)打开
vat.dbf,检查字段名是否有空格、非ASCII字符,字段类型是否正常; - 用GDAL命令行工具先排查栅格:
看输出里的属性表部分有没有报错,这能帮你定位是GDAL的问题还是属性表本身的问题;gdalinfo data/data_LEMMA/lemma_clip/w001001.adf - 如果GDAL能识别栅格但读不了属性表,用
gdal_translate重新导出栅格并保留属性表:
然后用R读取这个新生成的TIFF文件,一般就能绕过原文件的属性表问题。gdal_translate data/data_LEMMA/lemma_clip/w001001.adf output.tif -co COMPRESS=LZW
- 用DBF查看工具(比如LibreOffice Calc)打开
文件路径或权限问题
有时候路径的细微变化(比如相对路径对应的工作目录变更)或者系统权限变动,会导致GDAL无法读取关联的vat.dbf文件。
你可以:- 先用
file.exists("data/data_LEMMA/lemma_clip/w001001.adf")和file.exists("data/data_LEMMA/lemma_clip/vat.dbf")确认两个文件都存在; - 换成绝对路径读取试试,比如Windows下用
raster("C:/your/full/path/data_LEMMA/lemma_clip/w001001.adf"),Linux/macOS下用raster("/home/yourname/path/data_LEMMA/lemma_clip/w001001.adf"); - 检查文件夹权限,确保R有读取该文件夹所有文件的权限(比如Linux下用
chmod -R 755 data/data_LEMMA/lemma_clip/)。
- 先用
R包的缓存或状态异常
有时候R会话的缓存残留会导致奇怪的读取错误,尤其是之前读取失败过的情况下。
最简单的方法是重启R会话,清空所有缓存后再重新运行读取代码;另外也可以试试用terra包代替raster包读取,它对GDAL的支持更现代,兼容性更好:library(terra) dat2 <- rast("data/data_LEMMA/lemma_clip/w001001.adf")
内容的提问来源于stack exchange,提问作者user3561893




