Я пытаюсь преобразовать несколько файлов NetCDF4 в растры GeoTIFF, уменьшая при этом частоту дискретизации данных с ежедневной частоты до ежемесячной (без учета NaN).К сожалению, я получаю ошибки, когда добираюсь до шага, когда я хочу записать данные в геотарифы.
Было легко открывать и уменьшать выборку файлов с помощью xarray (потрясающие функциональные возможности по сравнению с R, с которыми я привык работать), сохраняя только одну переменную, как я хотел, и вычисляя средние месячные значения из ежедневных значений, ноЯ застрял, пытаясь экспортировать / конвертировать мои результаты в несколько * .tif файлов.
Даже пытался конвертировать его в несколько файлов NetCDF3, так как я могу легко конвертировать их в геотиф, но тоже не получилось.
Входными данными являются 4018 файлов ESA влажности почвы ".nc4" в суточной частоте, охватывающих весь земной шар, но неполных на каждом шаге (данные заполнены только полосами за каждый день, остальная часть пуста / нет данных),поэтому я хочу игнорировать 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 =Правда, ** kwargs) "Не уверен, что это имеет значение, но результаты кажутся нормальными, когда я печатаю xarray month_data.
# 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: индекс кортежа вне диапазона "Я думаю, чтоошибка в том, как я пытаюсь использовать это, а не в сценарии, хотя я не вижу, где.
Сценарий, составленный Робином Уилсоном, который идеально подходит для моих целей, был получен здесь: 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 classic).
Когда я проверяю month_data, я вижу то, что ожидал: только переменная "sm", все три измерения и 132 "значения" времени.
Может кто-нибудь помочь, пожалуйста?