R中raster包无法读取rgdal::readGDAL可正常打开的MODIS GeoTIFF文件
问题原因
该报错由旧版本raster包的坐标参考系(CRS)解析逻辑不兼容导致:你使用的raster 3.4-13版本仅支持识别开头带+的PROJ4格式CRS字符串,但该MODIS GeoTIFF文件内存储的CRS是WKT2格式(报错里展示的GEOGCRS开头的内容就是WKT格式的EPSG:4326定义),旧版raster读取时无法解析该格式就会抛出错误。而rgdal::readGDAL()在你使用的1.5-27版本已经支持WKT格式CRS的读取,所以可以正常打开文件。
解决方案
方案1:升级相关依赖包(推荐)
直接升级raster及关联的空间包到最新版本,新版已经完成了对WKT格式CRS的适配,升级后可直接读取文件:
install.packages(c("raster", "rgdal", "sp", "sf"))
升级完成后再调用raster()或stack()即可正常读取文件。
方案2:兼容旧版本包的读取方法
如果暂时无法升级依赖,可使用以下两种替代方式读取:
- 方法A:先用rgdal读取再转raster对象
# 先读取为SpatialGridDataFrame sgdf <- rgdal::readGDAL("../MCD64A1/TIFF/Win09/2014/MCD64monthly.A2014001.Win09.006.burndate.tif") # 转成RasterLayer对象 r <- raster(sgdf) # 多波段的话转RasterStack用stack(sgdf)即可
- 方法B:读取时手动指定CRS
读取时主动传入PROJ4格式的CRS,跳过raster对文件内WKT格式CRS的解析:
r <- raster( "../MCD64A1/TIFF/Win09/2014/MCD64monthly.A2014001.Win09.006.burndate.tif", crs = "+proj=longlat +datum=WGS84 +no_defs" ) # stack读取同理,添加crs参数即可
方案3:使用terra包读取
terra是raster开发者推出的新一代空间栅格处理包,对新版GDAL、PROJ的兼容性更好,读取该类文件无兼容问题,如有需要也可转为raster对象使用:
library(terra) # 直接读取文件 r_terra <- rast("../MCD64A1/TIFF/Win09/2014/MCD64monthly.A2014001.Win09.006.burndate.tif") # 如需转成raster包的RasterLayer对象 r_raster <- raster(r_terra)
内容的提问来源于stack exchange,提问作者sheß
相关产品推荐
相关产品推荐

