# Geo::METAR - phpMan

## NAME
    [Geo::METAR] - Process aviation weather reports in the METAR format.

## SYNOPSIS
      use [Geo::METAR];
      use strict;

      my $m = new [Geo::METAR];
      $m->metar("KFDY 251450Z 21012G21KT 8SM OVC065 04/M01 A3010 RMK 57014");
      print $m->dump;

      exit;

## DESCRIPTION
    METAR reports are available on-line, thanks to the National Weather
    Service. Since reading the METAR format isn't easy for non-pilots, these
    reports are relatively useles to the common man who just wants a quick
    glace at the weather. This module tries to parse the METAR reports so
    the data can be used to create readable weather reports and/or process
    the data in applications.

## USAGE
  How you might use this
    Here is how you *might* use the [Geo::METAR] module.

    One use that I have had for this module is to query the NWS METAR page
    (using the LWP modules) at:

    *<http://weather.noaa.gov/cgi-bin/mgetmetar.pl?cccc=EHSB>*

    to get an up-to-date METAR. Then, I scan thru the output, looking for
    what looks like a METAR string (that's not hard in Perl). Oh, EHSB can
    be any site location code where there is a reporting station.

    I then pass the METAR into this module and get the info I want. I can
    then update my webcam page with the current temperature, sky conditions,
    or whatnot. See for yourself at <http://webcam.idefix.net/>

    See the BUGS section for a remark about multiple passes with the same
    [Geo::METAR] object.

  Functions
    The following functions are defined in the METAR module. Most of them
    are *public*, meaning that you're supposed to use them. Some are
    *private*, meaning that you're not supposed to use them -- but I won't
    stop you. Assume that functions are *public* unless otherwise
    documented.

    metar()
        metar() is the function to whwich you should pass a METAR string. It
        will take care of decomposing it into its component parts converting
        the units and so on.

        Example: "$m->metar("KFDY 251450Z 21012G21KT 8SM OVC065 04/M01 A3010
        RMK 57014");"

    debug()
        debug() toggles debugging messages. By default, debugging is turned
        off. Turn it on if you are developing METAR or having trouble with
        it.

        debug() understands all of the following:

                Enable       Disable
                ------       -------
                  1             0
                'yes'         'no'
                'on'          'off'

        If you contact me for help, I'll likely ask you for some debugging
        output.

        Example: "$m->[debug(1)];"

    dump()
        dump() will dump the internal data structure for the METAR in a
        semi-human readable format.

        Example: "$m->dump;"

    version()
        version() will print out the current version.

        Example: "print $m->version;"

    _tokenize()
        PRIVATE

        Called internally to break the METAR into its component tokens.

    _process()
        PRIVATE

        Used to make sense of the tokens found in _tokenize().

  Variables
    After you've called metar(), you'd probably like to get at the
    individual values for things like temperature, dew point, and so on. You
    do that by accessing individual variables via the METAR object.

    This section lists those variables and what they represent.

    If you call dump(), you'll find that it spits all of these out.

    VERSION
        The version of METAR.pm that you're using.

    METAR
        The actual, raw METAR.

    TYPE
        Report type in English ("Routine Weather Report" or "Special Weather
        Report")

    SITE
        4-letter site code.

    DATE
        The date (just the day of the month) on which the report was issued.

    TIME
        The time at which the report was issued.

    MOD Modifier (AUTO/COR) if any.

    WIND_DIR_ENG
        The current wind direction in English (Southwest, East, North, etc.)

    WIND_DIR_ABB
        The current wind direction in abbreviated English (S, E, N, etc.)

    WIND_DIR_DEG
        The current wind direction in degrees.

    WIND_KTS
        The current wind speed in Knots.

    WIND_MPH
        The current wind speed in Miles Per Hour.

    WIND_MS
        The current wind speed in Metres Per Second.

    WIND_GUST_KTS
        The current wind gusting speed in Knots.

    WIND_GUST_MPH
        The current wind gusting speed in Miles Per Hour.

    WIND_GUST_MS
        The current wind gusting speed in Metres Per Second.

    WIND_VAR
        The wind variation in English

    WIND_VAR_1
        The first wind variation direction

    WIND_VAR_ENG_1
        The first wind variation direction in English

    WIND_VAR_2
        The second wind variation direction

    WIND_VAR_ENG_2
        The second wind variation direction in English

    VISIBILITY
        Visibility information.

    WIND
        Wind information.

    RUNWAY
        Runway information.

    WEATHER
        Current weather (array)

    WEATHER_LOG
        Current weather log (array)

    SKY Current cloud cover (array)

    TEMP_C
        Temperature in Celsius.

    TEMP_F
        Temperature in Fahrenheit.

    DEW_C
        Dew point in Celsius.

    DEW_F
        Dew point in Fahrenheit.

    HOURLY_TEMP_F
        Hourly current temperature, fahrenheit

    HOURLY_TEMP_C
        Hourly current temperature, celcius

    HOURLY_DEW_F
        Hourly dewpoint, fahrenheit

    HOURLY_DEW_C
        Hourly dewpoint, celcius

    ALT Altimeter setting (barometric pressure).

    ALT_HP
        Altimeter setting in hectopascals.

    REMARKS
        Any remarks in the report.

## NOTES
    Test suite is small and incomplete. Needs work yet.

    Older versions of this module were installed as "METAR" instaed of
    "[Geo::METAR]"

## BUGS
    The [Geo::METAR] is only initialized once, which means you'll get
    left-over crud in variables when you call the metar() function twice.

    What is an invalid METAR in one country is a standard one in the next.
    The standard is interpreted and used by meteorologists all over the
    world, with local variations. This means there will always be METARs
    that will trip the parser.

## TODO
    There is a TODO file included in the [Geo::METAR] distribution listing the
    outstanding tasks that I or others have devised. Please check that list
    before you submit a bug report or request a new feture. It might already
    be on the TODO list.

## AUTHORS AND COPYRIGHT
    Copyright 1997-2000, Jeremy D. Zawodny <Jeremy [at] Zawodny.com>

    Copyright 2007, Koos van den Hout <<koos@kzdoos.xs4all.nl>>

    [Geo::METAR] is covered under the GNU Public License (GPL) version 2 or
    later.

    The [Geo::METAR] Web site is located at:

      <http://idefix.net/~koos/perl/Geo-METAR/>

## CREDITS
    In addition to our work on [Geo::METAR], We've received ideas, help, and
    patches from the following folks:

      * Ethan Dicks <ethan.dicks [at] gmail.com>

        Testing of [Geo::METAR] at the South Pole. Corrections and pointers
            to interesting cases to test.

      * Otterboy <jong [at] watchguard.com>

        Random script fixes and initial debugging help

      * Remi Lefebvre <remi [at] solaria.dhis.org>

        Debian packaging as libgeo-metar-perl.deb.

      * Mike Engelhart <mengelhart [at] earthtrip.com>

        Wind direction naming corrections.

      * Michael Starling <mstarling [at] logic.bm>

        Wind direction naming corrections.

      * Hans Einar Nielssen <hans.einar [at] nielssen.com>

        Wind direction naming corrections.

      * Nathan Neulinger <nneul [at] umr.edu>

        Lots of enhancements and corrections. Too many to list here.

## RELATED PROJECTS
    lcdproc at <http://www.lcdproc.org/> uses [Geo::METAR] in lcdmetar.pl to
    display weather data on an lcd.

