如何将xarray MFdataset转换为多个geotiff?尝试两种方法但到目前为止都失败了

时间:2019-04-05 11:42:46

标签: python type-conversion python-xarray netcdf4 rasterio

我正在尝试将多个NetCDF4文件转换为GeoTIFF栅格,同时将数据从每日频率降采样为每月频率(忽略NaN)。不幸的是,当我想将数据写入geotiffs的步骤时出现错误。

使用xarray轻松打开和下采样文件(如果与R相比,这是很棒的功能,这是我经常使用的功能),只需保留一个变量即可,并且可以根据每日值计算每月平均值,但是我得到了卡住了尝试将我的结果导出/转换为多个* .tif文件的过程。

甚至尝试将其转换为多个NetCDF3文件,因为我可以轻松地将其转换为geotiff,但也失败了。

输入的数据是4018天的ESA土壤湿度“ .nc4”文件,它每天覆盖整个地球,但每一步都不完整(每天只有一小段充满数据,其余为空/ NA),所以我想忽略NaN来计算月均收入。

总共,这4018天达到132个月(11年),而我的xarray数据集由下面的代码生成,似乎证明了这一点,正如预期的那样。

import xarray as xr

# opening the files into an array

mfdataDIR = 'C:/full_path_here/*.nc'

DS = xr.open_mfdataset(mfdataDIR)


# downsampling it from daily to monthly means while keeping attributes and ignoring NAs 

monthly_data = DS.sm.resample(time="1M").mean(skipna= True, keep_attrs=True)

我在这里收到以下警告:“默认缩小尺寸将在xarray 0.12之后更改为分组尺寸。要使该警告静音,请传递dim = xarray.ALL_DIMS。显式传递。skipna= skipna,allow_lazy = True,** kwargs) ” 不确定是否重要,但是当我打印monthly_data xarray时结果似乎还可以。

# Now, trying to convert to GeoTIFFs using Robin Wilson's rasterio_to_xarray (and vice-versa) script (full script can be found on link below).

import sys

sys.path.insert(0, 'C:/path_to_py_script/')

import xarray_to_rasterio as xarrast

xarrast.xarray_to_rasterio_by_band(monthly_data, 'C:/path_here/%s.tif', dim= 'time')

现在,我收到此错误:“ IndexError:元组索引超出范围” 我认为错误在于我如何使用它,而不是在脚本上,尽管我看不到哪里。

罗宾·威尔逊(Robin Wilson)编写的脚本非常适合我的目标,该脚本是在这里获得的:https://github.com/robintw/XArrayAndRasterio/blob/master/rasterio_to_xarray.py

我看到错误追溯到第84行:

82  if len(xa.shape) == 2:
83        count = 1
84        height = xa.shape[0]
85        width = xa.shape[1]
86        band_indicies = 1
87   else:

和第122行:

122  xarray_to_rasterio(data, filename)

所以,我的时间似乎很暗淡,我希望这可以算作乐队,不是脚本期望的,所以它失败了。而且,显然我还在弄乱“ filename”参数。

不知道如何...我可以使用此脚本或对其进行修改以执行我想要的操作吗? (以保存132个“ .tif”文件,对应于132个暗淡的时间)


# Second option, not ideal but could still help me, if it hadn't also failed:


mDS = monthly_data.to_dataset()

paths = ['C:/path_here/%s.nc' ]
xr.save_mfdataset(mDS, paths, format='NETCDF3_CLASSIC')

got this error: "TypeError: save_mfdataset only supports writing Dataset objects, received type <class 'str'>"

我认为我缺乏python知识正在妨碍我,因为我在这两个过程中都不断出错(xarray到GeoTIFF或xarrayDataset到NetCDF3经典版)。

当我检查monthly_data时,我看到了我的期望:只有“ sm”变量,所有三个维度和132个时间“值”。

有人可以帮忙吗?

0 个答案:

没有答案