Создайте файл NetCDF с данными, замаскированными, чтобы сохранить только точки суши

Я замаскировал файл NetCDF, используя скрипт basemap.gs в градациях. Вот что у меня получилось с маской:

Пример

Итак, я хотел бы получить файл NetCDF, который содержит только континентальные данные, может ли кто-нибудь помочь мне с этим?


person Erincon    schedule 20.08.2016    source источник


Ответы (2)


Если я правильно понял вопрос, желательно иметь файл netcdf со всеми отсутствующими значениями (т.е. _Fillvalue) над морскими точками. Если это так, есть два решения из командной строки:

РЕШЕНИЕ 1:

Один из способов — использовать CDO для создания маски суша-море, а затем установить все точки моря как отсутствующие:

cdo -f nc2 setctomiss,0 -gtc,0 -remapcon,your_data_.nc -topo seamask.nc
  • где remapcon повторно сопоставляет топографию с доменом и разрешением вашего файла данных.
  • gtc выдает 1, когда встроенная топография выше уровня моря.
  • Затем setctomiss устанавливает все «нулевые» точки как отсутствующие.

Теперь вы можете использовать это, чтобы замаскировать файл данных:

cdo mul datafile.nc seamask.nc masked_datafile.nc

Однако в некоторых случаях я обнаружил, что процесс переназначения оставляет следы «океанских» данных по краям, в этом случае для большей безопасности вы можете использовать второй метод:

РЕШЕНИЕ 2

Загрузите файл данных netcdf для «расстояния до океана» с разрешением 1 км с этого сервера thredds: https://pae-paha.pacioos.hawaii.edu/thredds/ncss/dist2coast_1deg_land/dataset.html

Затем вы можете замаскировать любые точки на определенном расстоянии от океана, чтобы не рисковать, за счет возможного маскирования небольшого количества данных о суше.

Сначала я переназначил файл расстояния на целевое разрешение:

cdo remapbil,your_data.nc distance.nc remap_dist.nc

затем замаскируйте (например, в этом случае все точки в пределах 5 км от побережья, морские точки уже «отсутствуют» в этом файле) и умножьте

cdo mul your_data.nc -gtc,5 remap_dist.nc masked_data.nc

Как уже говорилось, это немного безопаснее, немного более многословно, но может маскировать некоторые данные о земле.

person Adrian Tompkins    schedule 17.08.2017

Поскольку вы уже замаскировали неконтинентальные значения, процесс на самом деле довольно прост. Существует команда под названием «sdfwrite», которая может записывать переменные, определенные в градусах, в файл. Код будет выглядеть примерно так:

define data = <insert expression for masked out data here>
set sdfwrite out.nc
sdfwrite data

* Убедитесь, что вы сняли угловые скобки; это было просто для шоу

Ввод их в градации 1) выделит память для сохранения отображаемых данных в переменной «данные» 2) установит имя выходного файла на «out.nc» (конечно, вы можете изменить его на любое другое) и 3 ) записывает информацию из переменной "data" в файл out.nc.

Теперь, насколько я знаю, невозможно просто не записывать замаскированные значения в файл, но при этом все они будут записаны как нулевые/неопределенные значения.

документация по sdfwrite

Надеюсь это поможет!!

person vgupta22    schedule 28.07.2017