You are here

function _weather_parse_wind in Weather 5

Same name and namespace in other branches
  1. 5.6 weather_parser.inc \_weather_parse_wind()
  2. 6.5 weather_parser.inc \_weather_parse_wind()
  3. 7 weather_parser.inc \_weather_parse_wind()

Extract the wind information

Parameters

string Raw METAR data to parse:

array Parsed METAR data, will be altered:

1 call to _weather_parse_wind()
weather_parse_metar in ./weather_parser.inc
Parses a raw METAR data string

File

./weather_parser.inc, line 141

Code

function _weather_parse_wind($metar_raw, &$metar) {
  if (preg_match('/^' . '([0-9]{3}|VRB)' . '([0-9]{2,3})' . '(G([0-9]{2,3}))?' . '(KT)' . '$/', $metar_raw, $matches)) {
    $metar['wind']['direction'] = (int) $matches[1];
    $wind_speed = (int) $matches[2];
    $wind_gusts = (int) $matches[4];
    $wind_unit = $matches[5];

    // Do a conversion to other formats
    switch ($wind_unit) {
      case 'KT':

        // Convert to km/h and mph
        // nautical mile = 1852 meters
        // statue mile = 1609.344 meters
        $metar['wind']['speed_kmh'] = round($wind_speed * 1.852, 1);
        $metar['wind']['gusts_kmh'] = round($wind_gusts * 1.852, 1);
        $metar['wind']['speed_mph'] = round($wind_speed * 1.151, 1);
        $metar['wind']['gusts_mph'] = round($wind_gusts * 1.151, 1);
        break;
    }
  }
  else {
    if (preg_match('/^' . '([0-9]{3})' . 'V' . '([0-9]{3})' . '$/', $metar_raw, $matches)) {
      $metar['wind']['variable_start'] = (int) $matches[1];
      $metar['wind']['variable_end'] = (int) $matches[2];
    }
  }
}