[an error occurred while processing this directive]
Во время путешествий на небольших судах очень важно иметь прогноз погоды, особенно на больших акваториях. При наличии устойчивой мобильной связи с интернетом получение прогноза не представляет сложности. Для этого есть множество сайтов и погодных приложений на любой вкус. В удаленных районах без мобильной связи часто единственным доступным средством связи остается спутниковый телефон или коммуникатор. Эту технику относительно недорого можно взять в аренду на время похода.
Мы предпочитаем пользоваться телефонами, у голосовой связи есть свои преимущества, а аренда пока обходится дешевле коммуникаторов. На Белом море, от Кольского полуострова и южнее, стабильно работает спутниковый оператор Thuraya. В более удаленных районах берем с собой Iridium, у которого глобальное покрытие, но дороже и аренда и тарифы.
Спутниковые телефоны мы используем только для связи голосом и sms-сообщениями. Тарифы на спутниковый интернет очень недешевые, а телефон нужно подключать к ноутбуку, который сложно уберечь в походных условиях. Таким образом, задача сводится к трем частям - получению прогноза, формированию sms-сообщений, и отправке их на спутниковый. В качестве источника прогнозов мы использовали и сообщения NAVTEX и Grib-файлы от NOAA
Сообщения Navtex содержат информацию для мореплавателей, в том числе прогнозы погоды, представлюят собой текст на английском языке, с формальной структурой, но человеко-читаемый. Подробнее о формате сообщений можно почитать в википедии. Сообщения составляют профессиональные метеорологи, и они содержат всю необходимую для судов информацию, включая высоту волны, видимость, различные опасные явления и т.п. Эти возможности отсутствуют при использовании, например, grib файлов. Сообщения Navtex передаются сетью станций по всему миру в закодированном виде по КВ каналу, принимаются на кораблях специальными автоматическими терминалами. Существует аналогичный глобальный сервис на подобных принципах, передающий погодные факсы с изображениями синоптических карт.
Сообщения Navtex и Meteo Fax можно получать, имея бюджетный КВ приемник с режимом SSB (например Degen 1103) или используя USB-донгл для цифрового ТВ со специальной КВ приставкой. Полученный от них звуковой сигнал можно расшифровать на ноутбуке или на смартфоне с программой-декодером. Мы пытались наладить прием этих сообщений на "коленках", и задачу в принципе решили, но для "тепличных" условий. Добиться стабильной устойчивой работы в походных условиях не удалось. В том числе из-за необходимости четко соблюдать расписание трансляций и тишину на время приема в течение 10-15 минут. Обеспечить это на ходу на открытой палубе небольшого судна оказалось слишком сложно.
Несколько лет назад на сайте администрации СевМорПути стали публиковать сообщения Navtex по Арктическому региону (METAREA XXI). Мы воспользовались этим источником для обеспечения прогнозами во время нашего похода на Вайгач. По расписанию запускалась программа, скачивала текст свежего сообщения Navtex, формировала sms и отправляла на наш Iridium. Из исходного сообщения извлекались данные только по интересующим районам, и сокращались до минимального размера текста. Эта система отработала в течение всего похода без сбоев, регулярно обеспечивая нас актуальными прогнозами.
В походе 2019 года на Белое море вновь встала проблема получения прогноза по sms на спутниковый. Выяснилось, что в Navtex по Арктическому региону прогнозы на район Белого моря отсутствуют. Получение прогноза было переделано на обработку grib файлов от NOAA. Программа по расписанию скачивала новые файлы очередного прогноза, извлекала данные для интересующих точек, формировала и отправляла sms на спутниковый Thuraya.
Для всего запланированного маршрута был подготовлен набор точек вдоль него с плановыми датами датами достижения этих точек. Прогноз отправлялся по запланированной точке, а также предыдущей и следующей - на случай опережения или отставания от графика. Внятного описания процедуры загрузки grib найти в интернет не удалось, ниже мы приводим пример с пояснениями.
Данные доступны на сервере https://nomads.ncep.noaa.gov/
.
Будем скачивать прогнозы GFS с разрешением 0.25 Degree (0.25°).
Эти прогнозы публикуются 4 раза в сутки: в 00, 06, 12, 18 часов (по UTC!).
Чтобы не качать гигантские grib-ы на всю планету, пользуемся Апи "grib filter",
это просто get-запрос, который возвращает отфильтрованный по нужному региону и переменным grib-файл.
Последовательно двигаясь по ссылкам с главной страницы и заполняя формы, в конце концов мы получим нужный URL файла. Ссылки ниже приведены для примера, со временем они перестанут работать, поскольку старые прогнозы удаляются с сервера.
https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl
https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?dir=%2Fgfs.20190807
https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?dir=%2Fgfs.20190807%2F06
Выбрав в форме нужные параметры, получим длинную ссылку вида:
https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?file=gfs.t06z.pgrb2.0p25.f000&dir=%2Fgfs.20190807%2F06&lev_10_m_above_ground=on&lev_surface=on&lev_2_m_above_ground=on&var_UGRD=on&var_TMP=on&var_PRES=on&var_GUST=on&var_VGRD=on&subregion=&leftlon=33.99583&rightlon=35.92335&bottomlat=64.92323&toplat=66.79073
Что содержится в этой ссылке:
Далее интересующие метеопараметры:
Далее выбираем уровни высоты над поверхностью (в Grib содержатся трехмерные данные!)
Далее выбираем регион - прямоугольную область координат:
Таким образом, мы получили один grib файл для определенного времени прогноза с определенным сроком. Чтобы скачать прогнозы с разными сроками, необходимо повторить этот же запрос с разными значениями параметра f000, f003, f006, f009, f012 и т.д.
Для извлечения данных из скачанных файлов мы использовали библиотеку NetCDF-Java Library, т.к. код нашего приложения написан на java. На этом же сайте есть варианты библиотеки для С, С++, и Fortran; можно найти и другие библиотеки, работающие с grib файлами на других языках, а также command-line утилиты. Мы не будем приводить свой исходный код (он слишком неаккуратный, и слишком зависит от языка и библиотеки). Отметим важные моменты, на которые нужно обратить внимание.
При извлечении переменных нужно убедиться, что они берутся для нужного уровня (level), и учесть единицы измерения. Например, температуру в кельвинах полезно перевести в градусы (вычесть 273.15). Направление и силу ветра можно вычислить по его uv-компонентам (u направлена на север, v - на восток). Получаем силу ветра (в м/с) = sqrt(u*u+v*v), а направление вектора ветра (в радианах) = Math.atan2(u, v). При определении румба важно не забыть, что "ветер дует в компас", то есть северный ветер - который дует С севера, а не НА север.
Координаты интересующей точки не обязательно попадут в узлы "сетки" grib, для которых файл содержит данные. В этом случае мы просто брали данне для ближайшей точки сетки. Возможно интерполировать данные по всем соседним узлам, но практически лишено смысла. Это не повысит точности прогноза, т.к. результат вычислений по модели уже содержит гораздо бОльшие ошибки.