Разбор формата метеоданных METAR модулями CPAN

| Нет комментариев

Среди «погодных» модулей на спане есть и модули для работы с форматами, которые используются в авиации. В частности, несколько модулей для разбора форматов METAR (однозначной расшифровки аббревиатуры не существует) и TAF (Terminal Aerodrome Format).

Данные в формате METAR по аэропортам можно получить, например, на сайте National Weather Service. (О кодах аэропортов уже говорилось). Строка с закодированной информацией о текущей погоде в Шереметьеве (UUED) выглядит так:

UUEE 111930Z 08005MPS 9999 -SN BKN011 M07/M09 Q1029 NOSIG RMK 57410151 07410151

Geo::METAR

Пользоваться модулем весьма просто:

use v5.10;
use strict;
use Geo::METAR;

my $metar = new Geo::METAR;
$metar->metar($ARGV[0]);
say $metar->dump;

Вызов dump печатает всю имеющуюся информацию, в то время как доступ к отдельным параметром осуществляется через индивидуальные имена, например:

say $metar->TEMP_C; # температура в градусах Цельсия
say $metar->DEW_C;  # точка росы

Эти строки напечатают «голые» значения, например: -07 и -09.

Geo::TAF

Несмотря на название, модуль Geo::TAF способен разбирать и формат METAR:

use v5.10;
use strict;
use Geo::TAF;

my $taf = new Geo::TAF;
$taf->metar($ARGV[0]);
say $taf->as_string;

С упомянутой выше строкой (если ее предварить словом METAR, то вместо вызова одноименного метода можно пользоваться универсальным методом decode, который сам определяет формат — METAR или TAF) эта программа напечатает следующее:

METAR for UUEE issued at 19:30 on 11st wind 080 degrees at 5m/sec visibility >10000m light snow 5-7 oktas cloud at 1100ft temperature -7C dewpoint -9C QNH 1029hPa no significant weather

(No significant weather, ха-ха.)

Точно также возможно обращаться и к отдельным параметрам, например:

say $taf->temp;     # напечатало -7
say $taf->dewpoint; # -9

Aviation::Report

Этот древний модуль 1998 года вполне работоспособен и понимает разные форматы:

use v5.10;
use strict;
use Aviation::Report;

say decode_METAR_TAF($ARGV[0]);

Однако, вывод врядли будет удобым для автоматической обработки. Интересующая меня строка с температурой и точкой росы (это температура, до которой нужно охладить воздух с содержащейся в нем сейчас влагой, чтобы она начала конденсироваться) выглядит так:

temperature -7 Celsius, dew point -9 Celsius.

Geo::WeatherNWS

Это еще один модуль, который напрямую обращается за данными на сайт National Weather Service. (Помимо веб-интерфейса с GET-запросом на этом сайте можно найти отдельные файлы с погодой за каждый час суток.) Но у меня с двух попыток метод Geo::WeatherNWS не завелся.

Комментировать

Страницы

  • img

Об этой записи

Сообщение опубликовано 11.12.2009 23:32. Автор — ash.

Предыдущая запись — Weather::Com

Следующая запись — Носик про Perl

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.