#python-3.x #bash #netcdf #netcdf4 #cdo-climate
#python-3.x #баш #netcdf #netcdf4 #cdo-климат
Вопрос:
Предположим, у меня есть 2 файла данных NetCDF с данными для одного и того же региона (например, Южной Америки, Африки и т.д.), Но с разными размерами сетки 0,5 градуса х 0,5 градуса и 1,0 градуса х 1,0 градуса в другом. Я хочу увеличить или уменьшить размер его сетки до другого значения, такого как 0.25 x 0.25 или 1.0 x 1.0, чтобы я мог легко использовать это для вычислений растра, сравнения и т.д.
Есть ли способ сделать это с помощью любого bash-скрипта, CDO и т.д.
Образец данных можно загрузить отсюда. https://www.dropbox.com/sh/0vdfn20p355st3i/AABKYO4do_raGHC34VnsXGPqa?dl
Можно ли для этого использовать различные методы, такие как билинейная интерполяция или кубическая интерполяция? Это довольно просто с ArcGIS и другим программным обеспечением, но есть ли способ сделать это для большого файла NetCDF с большими наборами данных? Предположим, что это всего лишь подмножество данных. То, что я буду преобразовывать позже, — это целый набор годовых данных.
Результирующий файл должен быть файлом .nc с измененным размером сетки, определенным пользователем.
Ответ №1:
Вы можете использовать cdo для переназначения сеток, например, в обычную сетку 1 градуса, которую вы можете использовать:
cdo remapcon,r360x180 input.nc output.nc
Помимо консервативного переназначения первого порядка (remapcon), другие варианты :
remapbil : bilinear interpolation
remapnn : nearest neighbour interpolation
remapcon2 : 2nd order conservative remapping
Также можно переназначить один файл в сетку, используемую в другом, если вы предпочитаете:
cdo remapcon,my_target_file.nc in.nc out.nc
РЕДАКТИРОВАТЬ 2021: доступно новое видео…
Чтобы ответить на комментарий ниже, спрашивающий о том, какой метод использовать, для получения полного руководства по этим методам интерполяции и вопросам, на которые следует обратить внимание в отношении подвыборки при грубой зернистости данных, вы можете обратиться к моему видео-руководству «пересчет и интерполяция» на YouTube.
В общем случае, если вы выполняете интерполяцию с высокого разрешения на низкое разрешение («грубая сетка») более чем в 2 раза, вы не хотите использовать билинейную интерполяцию, поскольку она по существу приведет к подвыборке поля. Это особенно проблематично для негладких, сильно неоднородных полей, таких как осадки. В таких случаях я бы всегда советовал использовать консервативный метод (remapcon или remapcon2). Подробности смотрите в моем видео-руководстве.
Еще один совет по скорости заключается в том, что если вы выполняете одну и ту же процедуру интерполяции для многих входных файлов с одинаковым разрешением, то вы можете вычислить веса интерполяции один раз, Используя genbil, gencon и т. Д., А Затем выполнить функцию переназначения, используя их в цикле над файлом. Это намного быстрее, поскольку генерация весов является медленной частью remapcon
Комментарии:
1. Спасибо, Адриан. Я всегда путаюсь в том, какой метод использовать при увеличении или уменьшении размера сетки растрового файла (так как конечный результат будет сильно отличаться в случае изменения размера растра). Какой из них лучше всего использовать или какое-либо ручное правило, которое вы можете знать для этого, когда вы увеличиваете размер растра и когда вы уменьшаете размер растра?
Ответ №2:
NCREMAP от NCO также имеет однострочное решение. Считайте, a.nc
что пересчет выполняется в той же сетке, b.nc
что и . Мы назовем ответ c.nc
(это переопределенный a.nc
).
ncremap -d b.nc a.nc c.nc
Чтобы выбрать консервативную вместо билинейной интерполяции (по умолчанию), используйте -a
:
ncremap -a conserve -d b.nc a.nc c.nc