Разрабатывается погодный сервис, где уже интегриван API с сайтов
https://openweathermap.org/ и ряда других API, но для наших задач не хватает данных на заданной высоте выше уровня моря, в частности силы и направления ветра. Это основная проблема и текущая задача. Такие данные можно получить в grib2 файлах, например
отсюда. Задача нашего сервиса - давать прогноз погоды по заданной точке (широта, долгота), но специфика использования подразумевает некоторые данные и по высотам относительно уровня моря. Но чтобы не делать два запроса сначала в
openweathermap, потом в noaa, при успешном исполнении задачи откажемся от другихи API будем всё брать с grib-файла.
Задача: разработать программу исполняемую под linux (в нашем случае centos 7) на любом языке bash, python, c/c++, js и так далее. Программа должна вернуть прогноз погоды, с шагом в 3 или 1 час на сутки вперёд, в
json-формате:
Array
(
[0] => Array
(
[date] => 2019-05-25 10:00:00
[overcast] => 10
[wind] => Array
(
[grnd] => Array
(
[speed] => 3
[gust] => 7
[dir] => 97
)
[925] => Array
[850] => Array
[700] => Array
[600] => Array
[500] => Array
[400] => Array
[300] => Array
[200] => Array
)
[temperature] => Array
(
[grnd] => 20
[925] => 15
[850] => 10
[700] => 5
[600] => 0
[500] => -1
[400] => -3
[300] => -5
[200] => -7
)
[rainfall] => 0
[airHumidity] => 64
[pressure] => 1012
)
[1] => Array
(
[date] => 2019-05-25 11:00:00
[overcast] => 10
...
),
[2] => Array
(
[date] => 2019-05-25 12:00:00
[overcast] => 10
...
),
...
)
date - дата в timestamp
overcast - процент облачности
wind - ветер по высотам, где grnd - уровень земли, 925 - уровень где атмосферное давление 925 гПа, 850, 700 и так далее. Это шаг который имеется в самих grib-файлах. speed - скорость ветра в м/с, gust - порывы в м/с, dir - направление ветра в градусах.
temperature - температура в Цельсиях, ключи по высотам аналогично с ветром.
rainfall - осадки в мм.
airHumidity - относительная влажность воздуха в %
pressure - давление в гПа
На сервере, где будет исполнятся программа уже установлены такие программы как wgrib, wgrib2, grib2json, есть python2, java, node, php, curl и прочий набор инструментов. Допустимо использование доп зависимостей, но с адекватной по сложности установкой.
Пример вызова:
program.sh --coords “54.94, 20.15” --grib-file path/to/file.grb2
--coords - координаты lat, long
--grib-file - путь до заранее скаченного grib файла, но это опционально, если параметр опущен, программа сама
скачивает минимально возможный квадрат для указанных координат и из него берёт данные.