如何使用xarray.open_mfdataset读取栅格时保留属性信息?
解决xarray.open_mfdataset读取栅格丢失元数据属性的问题
出现这个问题的核心原因是:xarray.open_mfdataset 默认使用的文件读取引擎不会自动保留栅格文件的专属元数据(比如你提到的AREA_OR_POINT、epsg、sensing_datetime),而rioxarray.open_rasterio是专门针对栅格文件优化的,能完整解析这类元数据。
下面是两种可行的解决方案:
方案1:在open_mfdataset中指定rasterio引擎
直接让open_mfdataset调用rioxarray的栅格读取逻辑,这样就能自动保留元数据属性:
import xarray as xr import rioxarray # 必须导入rioxarray才能启用rasterio引擎 data = xr.open_mfdataset( paths=file, chunks={'x': 512, 'y': 512}, parallel=True, engine='rasterio' # 关键:指定使用rasterio引擎 )
导入rioxarray是必要的,因为它会给xarray注册rasterio引擎的支持。
方案2:手动提取并添加元数据
如果因为某些原因无法指定rasterio引擎,可以先单独读取一个文件的元数据,再合并到open_mfdataset的结果中:
import xarray as xr import rioxarray # 先读取单个文件获取完整元数据 single_data = rioxarray.open_rasterio(file) metadata = single_data.attrs # 用open_mfdataset读取数据 data = xr.open_mfdataset( paths=file, chunks={'x': 512, 'y': 512}, parallel=True ) # 将元数据添加到结果中 data.attrs.update(metadata)
注意:如果你的paths包含多个文件,要确保所有文件的元数据属性一致,否则需要根据需求做合并或取舍。
内容的提问来源于stack exchange,提问作者MaxDragonheart
相关产品推荐
相关产品推荐

