我有多个*.tif
格式的栅格时间序列文件,希望将它们合并成一个NetCDF
文件。数据类型为uint16
。
我可以使用gdal_translate
命令将每个图像转换为netcdf格式:
gdal_translate -of netcdf -co FORMAT=NC4 20150520_0164.tif foo.nc
然后使用NCO
进行一些脚本编写,从文件名中提取日期并进行连接,但我想知道是否可以使用Python更有效地完成这项工作,使用xarray
及其新的rasterio
后端。
我可以轻松读取文件:
import glob
import xarray as xr
f = glob.glob('*.tif')
da = xr.open_rasterio(f[0])
da
返回
<xarray.DataArray (band: 1, y: 5490, x: 5490)>
[30140100 values with dtype=uint16]
Coordinates:
* band (band) int64 1
* y (y) float64 5e+05 5e+05 5e+05 5e+05 5e+05 4.999e+05 4.999e+05 ...
* x (x) float64 8e+05 8e+05 8e+05 8e+05 8.001e+05 8.001e+05 ...
Attributes:
crs: +init=epsg:32620
我可以将其中之一写入NetCDF:
ds.to_netcdf('foo.nc')
但理想情况下,我希望能够使用类似于xr.open_mfdataset
的方法,写入时间值(从文件名中提取),然后将整个聚合写入netCDF
。并且让dask
处理内存问题。
请问xarray
和dask
能够做到这样的吗?