You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

读取.adf栅格文件时GDAL报错,排除文件损坏后求故障原因

解决R中读取ArcInfo Grid时的GDAL字段信息读取错误

我之前处理ArcInfo Grid格式栅格时也碰到过类似的GDAL属性表读取问题,既然你已经排除了文件损坏的可能,那可以从这几个方向排查:

  • GDAL版本兼容性问题
    不同版本的GDAL对ArcInfo Grid属性表的解析逻辑可能存在差异。如果你最近更新了rasterrgdal包,对应的GDAL版本也可能跟着变更,这就可能导致原本能正常读取的文件突然报错。
    你可以先检查当前GDAL版本:

    library(gdalUtils)
    gdal_version()
    

    如果是刚更新的版本,试试降级到之前能用的GDAL绑定包;或者直接升级到最新稳定版,很多这类小bug都会在新版本里得到修复。

  • ArcInfo Grid属性表的隐性结构问题
    ArcInfo Grid的属性表存在同文件夹下的vat.dbf文件中,虽然你替换了主文件,但如果备份的vat.dbf本身有隐性问题(比如字段名含特殊字符、字段类型不兼容,或者DBF文件内部结构损坏但未影响文件整体完整性),也会触发这个错误。
    你可以试试:

    1. 用DBF查看工具(比如LibreOffice Calc)打开vat.dbf,检查字段名是否有空格、非ASCII字符,字段类型是否正常;
    2. 用GDAL命令行工具先排查栅格:
      gdalinfo data/data_LEMMA/lemma_clip/w001001.adf
      
      看输出里的属性表部分有没有报错,这能帮你定位是GDAL的问题还是属性表本身的问题;
    3. 如果GDAL能识别栅格但读不了属性表,用gdal_translate重新导出栅格并保留属性表:
      gdal_translate data/data_LEMMA/lemma_clip/w001001.adf output.tif -co COMPRESS=LZW
      
      然后用R读取这个新生成的TIFF文件,一般就能绕过原文件的属性表问题。
  • 文件路径或权限问题
    有时候路径的细微变化(比如相对路径对应的工作目录变更)或者系统权限变动,会导致GDAL无法读取关联的vat.dbf文件。
    你可以:

    1. 先用file.exists("data/data_LEMMA/lemma_clip/w001001.adf")file.exists("data/data_LEMMA/lemma_clip/vat.dbf")确认两个文件都存在;
    2. 换成绝对路径读取试试,比如Windows下用raster("C:/your/full/path/data_LEMMA/lemma_clip/w001001.adf"),Linux/macOS下用raster("/home/yourname/path/data_LEMMA/lemma_clip/w001001.adf")
    3. 检查文件夹权限,确保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

火山引擎 最新活动