R更新后raster包无法读取.e00(E00GRID)文件如何解决
R环境读取E00格式栅格文件报错问题
问题背景
更新R语言及所有已安装程序包后,此前可正常加载的ArcInfo Exchange grid格式(.e00后缀,即E00GRID文件)无法读取,使用raster包调用读取函数时直接抛出错误。已尝试公开在线转换工具处理该类文件,均无法正常完成转换,可接受两类解决方案:
- R环境内直接修复读取逻辑的方案
- 可将.e00文件转换为GeoTIFF等通用栅格格式的命令行工具方案
复现环境信息
当前运行环境、依赖包版本及报错输出如下:
> sessionInfo() R version 4.2.1 (2022-06-23 ucrt) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 x64 (build 22000) Matrix products: default locale: [1] LC_COLLATE=English_United States.utf8 LC_CTYPE=English_United States.utf8 [3] LC_MONETARY=English_United States.utf8 LC_NUMERIC=C [5] LC_TIME=English_United States.utf8 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] rgdal_1.5-32 raster_3.5-15 sp_1.5-0 loaded via a namespace (and not attached): [1] compiler_4.2.1 tools_4.2.1 Rcpp_1.0.8.3 codetools_0.2-18 grid_4.2.1 [6] lattice_0.20-45 terra_1.5-34 > raster("n_tw-2000.e00") Error in .local(.Object, ...) : Error in .rasterObjectFromFile(x, band = band, objecttype = "RasterLayer", : Cannot create a RasterLayer object from this file.
可用解决方案
R环境内修复方案
该报错根源是高版本rgdal绑定的GDAL库移除了E00格式的默认自动识别驱动,不需要降级R或相关包版本,按以下方法操作即可正常读取:
- 现有环境已预装
terra1.5-34版本,可直接调用,无需额外安装 - 不要直接用
raster()函数无参数读取e00文件,显式指定AVCE00驱动读取即可:
# 方法1:通过terra读取后转raster对象 library(terra) r <- rast("n_tw-2000.e00", driver = "AVCE00") # 转换为raster包支持的RasterLayer格式 r_raster <- raster::raster(r) # 方法2:通过rgdal内置的ogr2ogr接口先转成原生ArcInfo栅格格式再读取 library(rgdal) ogr2ogr("n_tw-2000.e00", "./e00_temp_dir", driver = "AVCE00", f = "AIG") r <- raster::raster("./e00_temp_dir")
命令行转换方案
如果R内读取仍存在兼容问题,直接用GDAL原生命令行工具转换为GeoTIFF即可,不需要找第三方在线工具:
- Windows环境安装OSGeo4W套件,Linux/macOS通过系统包管理器安装gdal-bin组件
- 打开终端执行对应转换命令:
# 基础转换命令 gdal_translate -of GTiff n_tw-2000.e00 n_tw-2000.tif # 若提示无法识别输入格式,显式指定输入驱动 gdal_translate -if AVCE00 -of GTiff n_tw-2000.e00 n_tw-2000.tif
转换生成的GeoTIFF文件无兼容问题,可被所有常见栅格处理工具正常加载。
绝大多数在线转换工具未集成AVCE00驱动,无法正确解析E00格式文件,不用浪费时间尝试。
内容的提问来源于stack exchange,提问作者Jes
相关产品推荐
相关产品推荐

