Я замаскировал файл NetCDF, используя скрипт basemap.gs
в градациях. Вот что у меня получилось с маской:
Итак, я хотел бы получить файл NetCDF, который содержит только континентальные данные, может ли кто-нибудь помочь мне с этим?
Я замаскировал файл NetCDF, используя скрипт basemap.gs
в градациях. Вот что у меня получилось с маской:
Итак, я хотел бы получить файл NetCDF, который содержит только континентальные данные, может ли кто-нибудь помочь мне с этим?
Если я правильно понял вопрос, желательно иметь файл netcdf со всеми отсутствующими значениями (т.е. _Fillvalue) над морскими точками. Если это так, есть два решения из командной строки:
Один из способов — использовать CDO для создания маски суша-море, а затем установить все точки моря как отсутствующие:
cdo -f nc2 setctomiss,0 -gtc,0 -remapcon,your_data_.nc -topo seamask.nc
Теперь вы можете использовать это, чтобы замаскировать файл данных:
cdo mul datafile.nc seamask.nc masked_datafile.nc
Однако в некоторых случаях я обнаружил, что процесс переназначения оставляет следы «океанских» данных по краям, в этом случае для большей безопасности вы можете использовать второй метод:
Загрузите файл данных 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
Как уже говорилось, это немного безопаснее, немного более многословно, но может маскировать некоторые данные о земле.
Поскольку вы уже замаскировали неконтинентальные значения, процесс на самом деле довольно прост. Существует команда под названием «sdfwrite», которая может записывать переменные, определенные в градусах, в файл. Код будет выглядеть примерно так:
define data = <insert expression for masked out data here>
set sdfwrite out.nc
sdfwrite data
* Убедитесь, что вы сняли угловые скобки; это было просто для шоу
Ввод их в градации 1) выделит память для сохранения отображаемых данных в переменной «данные» 2) установит имя выходного файла на «out.nc» (конечно, вы можете изменить его на любое другое) и 3 ) записывает информацию из переменной "data" в файл out.nc.
Теперь, насколько я знаю, невозможно просто не записывать замаскированные значения в файл, но при этом все они будут записаны как нулевые/неопределенные значения.
Надеюсь это поможет!!