Update of /cvsroot/phpweather/phpweather
In directory usw-pr-cvs1:/tmp/cvs-serv24514
Modified Files:
metar_parser.php
Log Message:
Instead of storing the different groups (cloud, weather, wind) like
group1, group2 etc, they're now stored as group[0], group[1] etc. This
makes it easier to pass them around.
Index: metar_parser.php
===================================================================
RCS file: /cvsroot/phpweather/phpweather/metar_parser.php,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- metar_parser.php 2001/07/09 20:31:43 1.9
+++ metar_parser.php 2001/07/14 21:47:45 1.10
@@ -18,7 +18,7 @@
* @see $decoded_metar
*/
class metar_parser extends data_retrieval {
-
+
/**
* The decoded METAR is stored here.
*
@@ -29,7 +29,7 @@
* @var array
*/
var $decoded_metar;
-
+
/**
* This constructor does nothing besides passing the input down the
* hierarchy.
@@ -37,12 +37,12 @@
* @param array The initial properties of the object.
*/
function metar_parser($input) {
- /* This class doesn't have any defaults, so it just calls the
- * parent constructor.
- */
+ /* This class doesn't have any defaults, so it just calls the
+ * parent constructor.
+ */
$this->data_retrieval($input);
}
-
+
/**
* Helper-function used to store temperatures.
*
@@ -57,19 +57,19 @@
* @access private
*/
function store_temp($temp, &$temp_c, &$temp_f) {
- /*
- * Note: $temp is converted to negative if $temp > 100.0 (See
- * Federal Meteorological Handbook for groups T, 1, 2 and 4).
- * For example, a temperature of 2.6�C and dew point of -1.5�C
- * would be reported in the body of the report as "03/M01" and the
- * TsnT'T'T'snT'dT'dT'd group as "T00261015").
- */
+ /*
+ * Note: $temp is converted to negative if $temp > 100.0 (See
+ * Federal Meteorological Handbook for groups T, 1, 2 and 4).
+ * For example, a temperature of 2.6�C and dew point of -1.5�C
+ * would be reported in the body of the report as "03/M01" and the
+ * TsnT'T'T'snT'dT'dT'd group as "T00261015").
+ */
if ($temp[0] == 1) {
$temp[0] = '-';
}
$temp_c = number_format($temp,1);
- /* The temperature in Fahrenheit. */
+ /* The temperature in Fahrenheit. */
$temp_f = number_format($temp * (9/5) + 32, 1);
}
@@ -100,24 +100,24 @@
}
if ($windunit == 'KT') {
- /* The windspeed measured in knots: */
+ /* The windspeed measured in knots: */
$knots = number_format($value);
- /* The windspeed measured in meters per second, rounded to one decimal place */
+ /* The windspeed measured in meters per second, rounded to one decimal place
+*/
$meterspersec = number_format($value * 0.5144, 1);
- /* The windspeed measured in miles per hour, rounded to one decimal place */
- $milesperhour = number_format($value * 1.1508, 1);
+ /* The windspeed measured in miles per hour, rounded to one decimal place */
+ $milesperhour = number_format($value * 1.1508, 1);
} elseif ($windunit == 'MPS') {
- /* The windspeed measured in meters per second */
+ /* The windspeed measured in meters per second */
$meterspersec = number_format($value);
- /* The windspeed measured in knots, rounded to one decimal place */
+ /* The windspeed measured in knots, rounded to one decimal place */
$knots = number_format($value / 0.5144, 1);
- /* The windspeed measured in miles per hour, rounded to one decimal place */
+ /* The windspeed measured in miles per hour, rounded to one decimal place */
$milesperhour = number_format($value / 0.5144 * 1.1508, 1);
} elseif ($windunit == 'KMH') {
- /* The windspeed measured in kilometers per hour */
+ /* The windspeed measured in kilometers per hour */
$meterspersec = number_format($value * 1000 / 3600, 1);
$knots = number_format($value * 1000 / 3600 / 0.5144, 1);
- /* The windspeed measured in miles per hour, rounded to one decimal place */
+ /* The windspeed measured in miles per hour, rounded to one decimal place */
$milesperhour = number_format($knots * 1.1508, 1);
}
}
@@ -136,74 +136,78 @@
* @access public
*/
function decode_metar() {
- /* initialization */
- $cloud_groups = 0;
- $weather_groups = 0;
- $visibility_groups = 0;
- $runway_groups = 0;
+ /* initialization */
+ $cloud_group_nr = 0;
+ $weather_group_nr = 0;
+ $visibility_group_nr = 0;
+ $runway_group_nr = 0;
$temp_visibility_miles = '';
$decoded_metar['remarks'] = '';
+ /* There should always be at least one cloud-group, even if it's
+ empty. */
+ $decoded_metar['clouds'][] = array();
+
$decoded_metar['metar'] = $this->get_metar();
$decoded_metar['location'] = $this->get_location();
-
+
$parts = explode(' ', $this->metar);
$num_parts = count($parts);
for ($i = 0; $i < $num_parts; $i++) {
$part = $parts[$i];
if (ereg('RMK|TEMPO|BECMG|INTER', $part)) {
- /* The rest of the METAR is either a remark or temporary
- * information. We skip the rest of the METAR.
- */
+ /* The rest of the METAR is either a remark or temporary
+ * information. We skip the rest of the METAR.
+ */
$decoded_metar['remarks'] .= ' ' . $part;
break;
} elseif ($part == 'METAR') {
- /*
- * Type of Report: METAR
- */
+ /*
+ * Type of Report: METAR
+ */
$decoded_metar['type'] = 'METAR';
} elseif ($part == 'SPECI') {
- /*
- * Type of Report: SPECI
- */
+ /*
+ * Type of Report: SPECI
+ */
$decoded_metar['type'] = 'SPECI';
} elseif (ereg('^[A-Z]{4}$', $part) && ! isset($decoded_metar['station'])) {
- /*
- * Station Identifier
- */
+ /*
+ * Station Identifier
+ */
$decoded_metar['station'] = $part;
} elseif (ereg('([0-9]{2})([0-9]{2})([0-9]{2})Z', $part, $regs)) {
- /*
- * Date and Time of Report.
- *
- * We return a standard Unix UTC/GMT timestamp suitable for
- * gmdate().
- * There has been a report about the time being wrong. If you
- * experience this, then change the next line. You should
- * add/subtract some hours to $regs[2], e.g. if all your times
- * are 960 minutes off (16 hours) then add 16 to $regs[2].
- */
+ /*
+ * Date and Time of Report.
+ *
+ * We return a standard Unix UTC/GMT timestamp suitable for
+ * gmdate().
+ * There has been a report about the time being wrong. If you
+ * experience this, then change the next line. You should
+ * add/subtract some hours to $regs[2], e.g. if all your times
+ * are 960 minutes off (16 hours) then add 16 to $regs[2].
+ */
if ($regs[1] > gmdate('j')) {
- /* The day is greather that the current day of month => the
- * report is from last month.
- */
+ /* The day is greather that the current day of month => the
+ * report is from last month.
+ */
$month = gmdate('n') - 1;
} else {
$month = gmdate('n');
}
$decoded_metar['time'] = gmmktime($regs[2], $regs[3], 0, $month, $regs[1],
gmdate('Y'));
} elseif (ereg('(AUTO|COR|RTD|CC[A-Z]|RR[A-Z])', $part, $regs)) {
-
- /*
- * Report Modifier: AUTO, COR, CCx or RRx
- */
-
+
+ /*
+ * Report Modifier: AUTO, COR, CCx or RRx
+ */
+
$decoded_metar['report_mod'] = $regs[1];
} elseif (ereg('([0-9]{3}|VRB)([0-9]{2,3})G?([0-9]{2,3})?(KT|MPS|KMH)', $part,
$regs)) {
-
- /* Wind Group */
+
+ /* Wind Group */
$decoded_metar['wind']['deg'] = $regs[1];
@@ -215,10 +219,10 @@
);
if (!empty($regs[3])) {
-
- /* We have a report with information about the gust.
- * First we have the gust measured in knots.
- */
+
+ /* We have a report with information about the gust.
+ * First we have the gust measured in knots.
+ */
$this->store_speed($regs[3],
$regs[4],
$decoded_metar['wind']['gust_knots'],
@@ -226,178 +230,194 @@
$decoded_metar['wind']['gust_miles_per_hour']);
}
} elseif (ereg('^([0-9]{3})V([0-9]{3})$', $part, $regs)) {
-
- /*
- * Variable wind-direction
- */
+
+ /*
+ * Variable wind-direction
+ */
$decoded_metar['wind']['var_beg'] = $regs[1];
$decoded_metar['wind']['var_end'] = $regs[2];
} elseif(ereg('^([0-9]{4})([NS]?[EW]?)$', $part, $regs)) {
-
- /*
- * Visibility in meters (4 digits only)
- */
-
- $visibility_groups++;
+
+ /*
+ * Visibility in meters (4 digits only)
+ */
+
if ($regs[1] == '0000') {
-
- /* Special low value */
-
- $decoded_metar['visibility_group' . $visibility_groups]['prefix'] = -1; /*
Less than */
-
- $decoded_metar['visibility_group' . $visibility_groups]['meter'] = 50;
- $decoded_metar['visibility_group' . $visibility_groups]['km'] = 0.05;
- $decoded_metar['visibility_group' . $visibility_groups]['ft'] = 164;
- $decoded_metar['visibility_group' . $visibility_groups]['miles'] = 0.031;
+
+ /* Special low value */
+
+ $decoded_metar['visibility'][$visibility_group_nr]['prefix'] = -1; /* Less
+than */
+
+ $decoded_metar['visibility'][$visibility_group_nr]['meter'] = 50;
+ $decoded_metar['visibility'][$visibility_group_nr]['km'] = 0.05;
+ $decoded_metar['visibility'][$visibility_group_nr]['ft'] = 164;
+ $decoded_metar['visibility'][$visibility_group_nr]['miles'] = 0.031;
} elseif ($regs[1] == '9999') {
-
- /* Special high value */
-
- $decoded_metar['visibility_group' . $visibility_groups]['prefix'] = 1;
- /* Greater than */
-
- $decoded_metar['visibility_group' . $visibility_groups]['meter'] = 10000;
- $decoded_metar['visibility_group' . $visibility_groups]['km'] = 10;
- $decoded_metar['visibility_group' . $visibility_groups]['ft'] = 32800;
- $decoded_metar['visibility_group' . $visibility_groups]['miles'] = 6.2;
+
+ /* Special high value */
+
+ $decoded_metar['visibility'][$visibility_group_nr]['prefix'] = 1;
+ /* Greater than */
+
+ $decoded_metar['visibility'][$visibility_group_nr]['meter'] = 10000;
+ $decoded_metar['visibility'][$visibility_group_nr]['km'] = 10;
+ $decoded_metar['visibility'][$visibility_group_nr]['ft'] = 32800;
+ $decoded_metar['visibility'][$visibility_group_nr]['miles'] = 6.2;
} else {
-
- /* Normal visibility, returned in both small and large units. */
-
- $decoded_metar['visibility_group' . $visibility_groups]['km'] =
number_format($regs[1]/1000, 1);
- $decoded_metar['visibility_group' . $visibility_groups]['miles'] =
number_format($regs[1]/1609.344, 1);
- $decoded_metar['visibility_group' . $visibility_groups]['meter'] = $regs[1] * 1;
- $decoded_metar['visibility_group' . $visibility_groups]['ft'] = round($regs[1]
* 3.28084);
+
+ /* Normal visibility, returned in both small and large units. */
+
+ $decoded_metar['visibility'][$visibility_group_nr]['km'] =
+number_format($regs[1]/1000, 1);
+ $decoded_metar['visibility'][$visibility_group_nr]['miles'] =
+number_format($regs[1]/1609.344, 1);
+ $decoded_metar['visibility'][$visibility_group_nr]['meter'] = $regs[1] * 1;
+ $decoded_metar['visibility'][$visibility_group_nr]['ft'] =
+round($regs[1] * 3.28084);
}
if (!empty($regs[2])) {
- $decoded_metar['visibility_group' . $visibility_groups]['dir'] =
$regs[2];
+ $decoded_metar['visibility'][$visibility_group_nr]['dir'] = $regs[2];
}
- } elseif (ereg('^[0-9]$', $part)) {
+
+ /* We increment $visibility_group_nr so that it's ready for
+ the next group. */
+ $visibility_group_nr++;
- /*
- * Temp Visibility Group, single digit followed by space.
- */
-
+ } elseif (ereg('^[0-9]$', $part)) {
+
+ /*
+ * Temp Visibility Group, single digit followed by space.
+ */
+
$temp_visibility_miles = $part;
} elseif (ereg('^M?(([0-9]?)[ ]?([0-9])(/?)([0-9]*))SM$',
$temp_visibility_miles . ' ' . $part, $regs)) {
-
- /*
- * Visibility Group
- */
-
- $visibility_groups++;
+
+ /*
+ * Visibility Group
+ */
+
if ($regs[4] == '/') {
$vis_miles = $regs[2] + $regs[3]/$regs[5];
- } else {
- $vis_miles = $regs[1];
- }
- if ($regs[0][0] == 'M') {
-
- /* Prefix - less than */
-
- $decoded_metar['visibility_group' . $visibility_groups]['prefix'] = -1; /*
Less than */
-
- }
+ } else {
+ $vis_miles = $regs[1];
+ }
+ if ($regs[0][0] == 'M') {
+
+ /* Prefix - less than */
+
+ $decoded_metar['visibility'][$visibility_group_nr]['prefix'] = -1; /* Less
+than */
+
+ }
+
+ /* The visibility measured in miles */
+
+ $decoded_metar['visibility'][$visibility_group_nr]['miles'] =
+number_format($vis_miles, 1);
+
+ /* The visibility measured in feet */
+
+ $decoded_metar['visibility'][$visibility_group_nr]['ft'] =
+round($vis_miles * 5280, 1);
+
+ /* The visibility measured in kilometers */
+
+ $decoded_metar['visibility'][$visibility_group_nr]['km'] =
+number_format($vis_miles * 1.6093, 1);
+
+ /* The visibility measured in meters */
+
+ $decoded_metar['visibility'][$visibility_group_nr]['meter'] =
+round($vis_miles * 1609.3);
+
+ /* We increment $visibility_group_nr so that it's ready for
+ the next group. */
+ $visibility_group_nr++;
- /* The visibility measured in miles */
-
- $decoded_metar['visibility_group' . $visibility_groups]['miles'] =
number_format($vis_miles, 1);
-
- /* The visibility measured in feet */
-
- $decoded_metar['visibility_group' . $visibility_groups]['ft'] =
round($vis_miles * 5280, 1);
-
- /* The visibility measured in kilometers */
-
- $decoded_metar['visibility_group' . $visibility_groups]['km'] =
number_format($vis_miles * 1.6093, 1);
-
- /* The visibility measured in meters */
-
- $decoded_metar['visibility_group' . $visibility_groups]['meter'] =
round($vis_miles * 1609.3);
} elseif ($part == 'CAVOK') {
+
+ /* CAVOK: Used when the visibility is greater than 10
+ * kilometers, the lowest cloud-base is at 5000 feet or more
+ * and there is no significant weather.
+ */
+
+ /* Greater than */
+ $decoded_metar['visibility'][$visibility_group_nr]['prefix'] = 1;
+
+ $decoded_metar['visibility'][$visibility_group_nr]['km'] = 10;
+ $decoded_metar['visibility'][$visibility_group_nr]['meter'] = 10000;
+ $decoded_metar['visibility'][$visibility_group_nr]['miles'] = 6.2;
+ $decoded_metar['visibility'][$visibility_group_nr]['ft'] = 32800;
+ $decoded_metar['cloud_group1']['condition'] = 'CAVOK';
+
+ /* We increment $visibility_group_nr so that it's ready for
+ the next group. */
+ $visibility_group_nr++;
- /* CAVOK: Used when the visibility is greater than 10
- * kilometers, the lowest cloud-base is at 5000 feet or more
- * and there is no significant weather.
- */
-
- $visibility_groups++;
- $decoded_metar['visibility_group' . $visibility_groups]['prefix'] = 1;
- /* Greater than */
-
- $decoded_metar['visibility_group' . $visibility_groups]['km'] = 10;
- $decoded_metar['visibility_group' . $visibility_groups]['meter'] = 10000;
- $decoded_metar['visibility_group' . $visibility_groups]['miles'] = 6.2;
- $decoded_metar['visibility_group' . $visibility_groups]['ft'] = 32800;
- $decoded_metar['cloud_group1']['condition'] = 'CAVOK';
} elseif
(ereg('^R([0-9]{2})([RLC]?)/([MP]?)([0-9]{4})([DNU]?)V?(P?)([0-9]{4})?([DNU]?)$',
$part, $regs)) {
-
- /* Runway-group */
-
- $runway_groups++;
- $decoded_metar['runway_group' . $runway_groups]['nr'] = $regs[1];
+
+ /* Runway-group */
+
+ $decoded_metar['runway'][$runway_group_nr]['nr'] = $regs[1];
if (!empty($regs[2])) {
- $decoded_metar['runway_group' . $runway_groups]['approach'] = $regs[2];
+ $decoded_metar['runway'][$runway_group_nr]['approach'] = $regs[2];
}
if (!empty($regs[7])) {
-
- /* We have both min and max visibility since $regs[7] holds
- * the max visibility.
- */
-
- if (!empty($regs[5])) {
- /* $regs[5] is tendency for min visibility. */
- $decoded_metar['runway_group' . $runway_groups]['min_tendency'] = $regs[5];
+
+ /* We have both min and max visibility since $regs[7] holds
+ * the max visibility.
+ */
+
+ if (!empty($regs[5])) {
+ /* $regs[5] is tendency for min visibility. */
+ $decoded_metar['runway'][$runway_group_nr]['min_tendency'] = $regs[5];
}
- if (!empty($regs[8])) {
- /* $regs[8] is tendency for max visibility. */
- $decoded_metar['runway_group' . $runway_groups]['max_tendency'] = $regs[8];
+ if (!empty($regs[8])) {
+ /* $regs[8] is tendency for max visibility. */
+ $decoded_metar['runway'][$runway_group_nr]['max_tendency'] = $regs[8];
}
if ($regs[3] == 'M') {
-
- /* Less than. */
-
- $decoded_metar['runway_group' . $runway_groups]['min_prefix'] = -1;
+
+ /* Less than. */
+
+ $decoded_metar['runway'][$runway_group_nr]['min_prefix'] = -1;
}
- $decoded_metar['runway_group' . $runway_groups]['min_meter'] = $regs[4] * 1;
- $decoded_metar['runway_group' . $runway_groups]['min_ft'] = round($regs[4] *
3.2808);
+ $decoded_metar['runway'][$runway_group_nr]['min_meter'] = $regs[4] * 1;
+ $decoded_metar['runway'][$runway_group_nr]['min_ft'] = round($regs[4] *
+3.2808);
if ($regs[6] == 'P') {
-
- /* Greater than. */
-
- $decoded_metar['runway_group' . $runway_groups]['max_prefix'] = 1;
+
+ /* Greater than. */
+
+ $decoded_metar['runway'][$runway_group_nr]['max_prefix'] = 1;
}
- $decoded_metar['runway_group' . $runway_groups]['max_meter'] = $regs[7] * 1;
- $decoded_metar['runway_group' . $runway_groups]['max_ft'] = round($regs[7] *
3.2808);
+ $decoded_metar['runway'][$runway_group_nr]['max_meter'] = $regs[7] * 1;
+ $decoded_metar['runway'][$runway_group_nr]['max_ft'] = round($regs[7] *
+3.2808);
} else {
-
- /* We only have a single visibility. */
-
- if (!empty($regs[5])) {
- /* $regs[5] holds the tendency for visibility. */
- $decoded_metar['runway_group' . $runway_groups]['tendency'] = $regs[5];
+
+ /* We only have a single visibility. */
+
+ if (!empty($regs[5])) {
+ /* $regs[5] holds the tendency for visibility. */
+ $decoded_metar['runway'][$runway_group_nr]['tendency'] = $regs[5];
}
if ($regs[3] == 'M') {
-
- /* Less than. */
-
- $decoded_metar['runway_group' . $runway_groups]['prefix'] = -1;
+
+ /* Less than. */
+
+ $decoded_metar['runway'][$runway_group_nr]['prefix'] = -1;
} elseif ($regs[3] == 'P') {
-
- /* Greater than. */
-
- $decoded_metar['runway_group' . $runway_groups]['prefix'] = 1;
+
+ /* Greater than. */
+
+ $decoded_metar['runway'][$runway_group_nr]['prefix'] = 1;
}
- $decoded_metar['runway_group' . $runway_groups]['meter'] = $regs[4] * 1;
- $decoded_metar['runway_group' . $runway_groups]['ft'] = round($regs[4] *
3.2808);
+ $decoded_metar['runway'][$runway_group_nr]['meter'] = $regs[4] * 1;
+ $decoded_metar['runway'][$runway_group_nr]['ft'] = round($regs[4] *
+3.2808);
}
+
+ /* We increment $runway_group_nr so that it's ready for the
+ next group. */
+ $runway_group_nr++;
+
} elseif (ereg('^(VC)?' . /* Proximity */
'(-|\+)?' . /* Intensity */
'(MI|PR|BC|DR|BL|SH|TS|FZ)?' . /* Descriptor */
@@ -405,114 +425,120 @@
'(BR|FG|FU|VA|DU|SA|HZ|PY)?' . /* Obscuration */
'(PO|SQ|FC|SS)?$', /* Other */
$part, $regs)) {
-
- /*
- * Current weather-group.
- */
-
- $weather_groups++;
- $decoded_metar['weather_group'.$weather_groups]['proximity'] = $regs[1];
- $decoded_metar['weather_group'.$weather_groups]['intensity'] = $regs[2];
- $decoded_metar['weather_group'.$weather_groups]['descriptor'] = $regs[3];
- $decoded_metar['weather_group'.$weather_groups]['precipitation'] = $regs[4];
- $decoded_metar['weather_group'.$weather_groups]['obscuration'] = $regs[6];
- $decoded_metar['weather_group'.$weather_groups]['other'] = $regs[7];
-
+
+ /*
+ * Current weather-group.
+ */
+
+ $decoded_metar['weather'][$weather_group_nr]['proximity'] = $regs[1];
+ $decoded_metar['weather'][$weather_group_nr]['intensity'] = $regs[2];
+ $decoded_metar['weather'][$weather_group_nr]['descriptor'] = $regs[3];
+ $decoded_metar['weather'][$weather_group_nr]['precipitation'] = $regs[4];
+ $decoded_metar['weather'][$weather_group_nr]['obscuration'] = $regs[6];
+ $decoded_metar['weather'][$weather_group_nr]['other'] = $regs[7];
+
+
+ /* We increment $weather_group_nr so that it's ready for the
+ next group. */
+ $weather_group_nr++;
+
} elseif ($part == 'SKC' || $part == 'CLR') {
- /*
- * Cloudr-group.
- * There can be up to 3 of these groups, so we store them as
- * cloud_layer1, cloud_layer2 and cloud_layer3.
- */
-
- $cloud_groups++;
+ /* Cloud-group */
- /* Again we have to translate the code-characters to a
- * meaningful string.
- */
+
+
+ /* Again we have to translate the code-characters to a
+ * meaningful string.
+ */
+
+ $decoded_metar['clouds'][ $cloud_group_nr]['condition'] = $part;
+
+ /* We increment $cloud_group_nr so that it's ready for the
+ next group. */
+ $cloud_group_nr++;
- $decoded_metar['cloud_group'. $cloud_groups]['condition'] = $part;
} elseif (ereg('^(VV|FEW|SCT|BKN|OVC)([0-9]{3}|///)(CB|TCU)?$', $part, $regs)) {
-
- /* We have found (another) a cloud-layer-group. There can be up
- * to 3 of these groups, so we store them as cloud_group1,
- * cloud_group2 and cloud_group3.
- */
-
- $cloud_groups++;
- $decoded_metar['cloud_group'.$cloud_groups]['condition'] = $regs[1];
+
+ /* We have found (another) a cloud-layer-group. */
+
+ $decoded_metar['clouds'][$cloud_group_nr]['condition'] = $regs[1];
if (!empty($regs[3])) {
- $decoded_metar['cloud_group'.$cloud_groups]['cumulus'] = $regs[3];
+ $decoded_metar['clouds'][$cloud_group_nr]['cumulus'] = $regs[3];
}
if ($regs[2] == '000') {
-
- /* '000' is a special height. */
-
- $decoded_metar['cloud_group'.$cloud_groups]['ft'] = 100;
- $decoded_metar['cloud_group'.$cloud_groups]['meter'] = 30;
- $decoded_metar['cloud_group'.$cloud_groups]['prefix'] = -1; /* Less than */
+
+ /* '000' is a special height. */
+
+ $decoded_metar['clouds'][$cloud_group_nr]['ft'] = 100;
+ $decoded_metar['clouds'][$cloud_group_nr]['meter'] = 30;
+ $decoded_metar['clouds'][$cloud_group_nr]['prefix'] = -1; /* Less than */
} elseif ($regs[2] == '///') {
-
- /* '///' means height nil */
-
- $decoded_metar['cloud_group'.$cloud_groups]['ft'] = 'nil';
- $decoded_metar['cloud_group'.$cloud_groups]['meter'] = 'nil';
+
+ /* '///' means height nil */
+
+ $decoded_metar['clouds'][$cloud_group_nr]['ft'] = 'nil';
+ $decoded_metar['clouds'][$cloud_group_nr]['meter'] = 'nil';
} else {
- $decoded_metar['cloud_group'.$cloud_groups]['ft'] = $regs[2] *100;
- $decoded_metar['cloud_group'.$cloud_groups]['meter'] = round($regs[2] * 30.48);
+ $decoded_metar['clouds'][$cloud_group_nr]['ft'] = $regs[2] *100;
+ $decoded_metar['clouds'][$cloud_group_nr]['meter'] = round($regs[2] *
+30.48);
}
- } elseif (ereg('^(M?[0-9]{2})/(M?[0-9]{2})?$', $part, $regs)) {
- /*
- * Temperature/Dew Point Group.
- *
- * The temperature and dew-point measured in Celsius and Fahrenheit.
- */
+ /* We increment $cloud_group_nr so that it's ready for the
+ next group. */
+ $cloud_group_nr++;
- $decoded_metar['temperature']['temp_c'] = round(strtr($regs[1], 'M', '-'));
- $decoded_metar['temperature']['temp_f'] = round(strtr($regs[1], 'M', '-') * (9/5)
+ 32);
+ } elseif (ereg('^(M?[0-9]{2})/(M?[0-9]{2})?$', $part, $regs)) {
+
+ /*
+ * Temperature/Dew Point Group.
+ *
+ * The temperature and dew-point measured in Celsius and Fahrenheit.
+ */
+
+ $decoded_metar['temperature']['temp_c'] = round(strtr($regs[1], 'M', '-'));
+ $decoded_metar['temperature']['temp_f'] = round(strtr($regs[1], 'M', '-') *
+(9/5) + 32);
if (!empty($regs[2])) {
- $decoded_metar['temperature']['dew_c'] = round(strtr($regs[2], 'M', '-'));
- $decoded_metar['temperature']['dew_f'] = round(strtr($regs[2], 'M', '-') * (9/5)
+ 32);
+ $decoded_metar['temperature']['dew_c'] = round(strtr($regs[2], 'M', '-'));
+ $decoded_metar['temperature']['dew_f'] = round(strtr($regs[2], 'M', '-') *
+(9/5) + 32);
}
} elseif(ereg('A([0-9]{4})', $part, $regs)) {
-
- /*
- * Altimeter.
- * The pressure measured in inHg.
- */
-
- $decoded_metar['altimeter']['inhg'] = number_format($regs[1]/100, 2);
-
- /* The pressure measured in mmHg, hPa and atm */
-
- $decoded_metar['altimeter']['mmhg'] = number_format($regs[1] * 0.254, 1, '.', '');
- $decoded_metar['altimeter']['hpa'] = round($regs[1] * 0.33864);
+
+ /*
+ * Altimeter.
+ * The pressure measured in inHg.
+ */
+
+ $decoded_metar['altimeter']['inhg'] = number_format($regs[1]/100, 2);
+
+ /* The pressure measured in mmHg, hPa and atm */
+
+ $decoded_metar['altimeter']['mmhg'] = number_format($regs[1] * 0.254, 1, '.',
+'');
+ $decoded_metar['altimeter']['hpa'] = round($regs[1] * 0.33864);
$decoded_metar['altimeter']['atm'] = number_format($regs[1] * 3.3421e-4, 3,
'.', '');
} elseif(ereg('Q([0-9]{4})', $part, $regs)) {
-
- /*
- * Altimeter.
- * The specification doesn't say anything about
- * the Qxxxx-form, but it's in the METARs.
- */
-
- /* The pressure measured in hPa */
-
- $decoded_metar['altimeter']['hpa'] = round($regs[1]);
-
- /* The pressure measured in mmHg, inHg and atm */
-
- $decoded_metar['altimeter']['mmhg'] = number_format($regs[1] * 0.75006, 1, '.',
'');
- $decoded_metar['altimeter']['inhg'] = number_format($regs[1] * 0.02953, 2);
- $decoded_metar['altimeter']['atm'] = number_format($regs[1] * 9.8692e-4, 3, '.',
'');
+
+ /*
+ * Altimeter.
+ * The specification doesn't say anything about
+ * the Qxxxx-form, but it's in the METARs.
+ */
+
+ /* The pressure measured in hPa */
+
+ $decoded_metar['altimeter']['hpa'] = round($regs[1]);
+
+ /* The pressure measured in mmHg, inHg and atm */
+
+ $decoded_metar['altimeter']['mmhg'] = number_format($regs[1] * 0.75006, 1,
+'.', '');
+ $decoded_metar['altimeter']['inhg'] = number_format($regs[1] * 0.02953, 2);
+ $decoded_metar['altimeter']['atm'] = number_format($regs[1] * 9.8692e-4, 3,
+'.', '');
} elseif (ereg('^T([0-9]{4})([0-9]{4})', $part, $regs)) {
-
- /*
- * Temperature/Dew Point Group, coded to tenth of degree Celsius.
- */
-
+
+ /*
+ * Temperature/Dew Point Group, coded to tenth of degree Celsius.
+ */
+
$this->store_temp($regs[1] / 10,
$decoded_metar['temperature']['temp_c'],
$decoded_metar['temperature']['temp_f']);
@@ -524,28 +550,28 @@
$decoded_metar['temperature']['temp_c'],
$decoded_metar['temperature']['temp_f']);
} elseif (ereg('^1([0-9]{4}$)', $part, $regs)) {
-
- /*
- * 6 hour maximum temperature Celsius, coded to tenth of degree
- */
-
+
+ /*
+ * 6 hour maximum temperature Celsius, coded to tenth of degree
+ */
+
$this->store_temp($regs[1] / 10,
$decoded_metar['temp_min_max']['max6h_c'],
$decoded_metar['temp_min_max']['max6h_f']);
} elseif (ereg('^2([0-9]{4}$)', $part, $regs)) {
-
- /*
- * 6 hour minimum temperature Celsius, coded to tenth of degree
- */
+
+ /*
+ * 6 hour minimum temperature Celsius, coded to tenth of degree
+ */
$this->store_temp($regs[1] / 10,
$decoded_metar['temp_min_max']['min6h_c'],
$decoded_metar['temp_min_max']['min6h_f']);
} elseif (ereg('^4([0-9]{4})([0-9]{4})$', $part, $regs)) {
-
- /*
- * 24 hour maximum and minimum temperature Celsius, coded to
- * tenth of degree
- */
+
+ /*
+ * 24 hour maximum and minimum temperature Celsius, coded to
+ * tenth of degree
+ */
$this->store_temp($regs[1] / 10,
$decoded_metar['temp_min_max']['max24h_c'],
$decoded_metar['temp_min_max']['max24h_f']);
@@ -553,48 +579,48 @@
$decoded_metar['temp_min_max']['min24h_c'],
$decoded_metar['temp_min_max']['min24h_f']);
} elseif(ereg('^P([0-9]{4})', $part, $regs)) {
-
- /*
- * Precipitation during last hour in hundredths of an inch
- */
+
+ /*
+ * Precipitation during last hour in hundredths of an inch
+ */
if ($regs[1] == '0000') {
$decoded_metar['precipitation']['in'] = -1;
$decoded_metar['precipitation']['mm'] = -1;
} else {
- $decoded_metar['precipitation']['in'] = number_format($regs[1]/100, 2);
- $decoded_metar['precipitation']['mm'] = number_format($regs[1]*0.254, 2);
+ $decoded_metar['precipitation']['in'] = number_format($regs[1]/100, 2);
+ $decoded_metar['precipitation']['mm'] = number_format($regs[1]*0.254, 2);
}
} elseif(ereg('^6([0-9]{4})', $part, $regs)) {
-
- /*
- * Precipitation during last 3 or 6 hours in hundredths of an
- * inch.
- */
+
+ /*
+ * Precipitation during last 3 or 6 hours in hundredths of an
+ * inch.
+ */
if ($regs[1] == '0000') {
$decoded_metar['precipitation']['in_6h'] = -1;
$decoded_metar['precipitation']['mm_6h'] = -1;
} else {
- $decoded_metar['precipitation']['in_6h'] = number_format($regs[1]/100, 2);
- $decoded_metar['precipitation']['mm_6h'] = number_format($regs[1]*0.254, 2);
+ $decoded_metar['precipitation']['in_6h'] = number_format($regs[1]/100, 2);
+ $decoded_metar['precipitation']['mm_6h'] = number_format($regs[1]*0.254, 2);
}
} elseif(ereg('^7([0-9]{4})', $part, $regs)) {
-
- /*
- * Precipitation during last 24 hours in hundredths of an inch.
- */
+
+ /*
+ * Precipitation during last 24 hours in hundredths of an inch.
+ */
if ($regs[1] == '0000') {
$decoded_metar['precipitation']['in_24h'] = -1;
$decoded_metar['precipitation']['mm_24h'] = -1;
} else {
- $decoded_metar['precipitation']['in_24h'] = number_format($regs[1]/100, 2, '.',
'');
- $decoded_metar['precipitation']['mm_24h'] = number_format($regs[1]*0.254, 2, '.',
'');
+ $decoded_metar['precipitation']['in_24h'] = number_format($regs[1]/100, 2,
+'.', '');
+ $decoded_metar['precipitation']['mm_24h'] = number_format($regs[1]*0.254,
+2, '.', '');
}
} elseif(ereg('^4/([0-9]{3})', $part, $regs)) {
-
- /*
- * Snow depth in inches
- */
-
+
+ /*
+ * Snow depth in inches
+ */
+
if ($regs[1] == '0000') {
$decoded_metar['precipitation']['snow_in'] = -1;
$decoded_metar['precipitation']['snow_mm'] = -1;
@@ -603,46 +629,46 @@
$decoded_metar['precipitation']['snow_mm'] = round($regs[1] * 25.4);
}
} else {
-
- /*
- * If we couldn't match the group, we assume that it was a
- * remark.
- */
-
+
+ /*
+ * If we couldn't match the group, we assume that it was a
+ * remark.
+ */
+
$decoded_metar['remarks'] .= ' ' . $part;
}
}
-
- /*
- * Relative humidity
- */
-
+
+ /*
+ * Relative humidity
+ */
+
if (!empty($decoded_metar['temperature']['temp_c']) &&
!empty($decoded_metar['temperature']['dew_c'])) {
$decoded_metar['rel_humidity'] = number_format(100 *
- (
- 610.71 +
- 44.429 * $decoded_metar['temperature']['dew_c'] +
- 1.4169 * pow($decoded_metar['temperature']['dew_c'], 2) +
- 0.0274 * pow($decoded_metar['temperature']['dew_c'], 3) +
- 2.6114E-4 * pow($decoded_metar['temperature']['dew_c'], 4) +
- 2.8599E-6 * pow($decoded_metar['temperature']['dew_c'], 5)
- )
- /
- (
- 610.71 +
- 44.429 * $decoded_metar['temperature']['temp_c'] +
- 1.4169 * pow($decoded_metar['temperature']['temp_c'], 2) +
- 0.0274 * pow($decoded_metar['temperature']['temp_c'], 3) +
- 2.6114E-4 * pow($decoded_metar['temperature']['temp_c'], 4) +
- 2.8599E-6 * pow($decoded_metar['temperature']['temp_c'], 5)
- ), 1);
+ (
+ 610.71 +
+ 44.429 *
+$decoded_metar['temperature']['dew_c'] +
+ 1.4169 *
+pow($decoded_metar['temperature']['dew_c'], 2) +
+ 0.0274 *
+pow($decoded_metar['temperature']['dew_c'], 3) +
+ 2.6114E-4 *
+pow($decoded_metar['temperature']['dew_c'], 4) +
+ 2.8599E-6 *
+pow($decoded_metar['temperature']['dew_c'], 5)
+ )
+ /
+ (
+ 610.71 +
+ 44.429 *
+$decoded_metar['temperature']['temp_c'] +
+ 1.4169 *
+pow($decoded_metar['temperature']['temp_c'], 2) +
+ 0.0274 *
+pow($decoded_metar['temperature']['temp_c'], 3) +
+ 2.6114E-4 *
+pow($decoded_metar['temperature']['temp_c'], 4) +
+ 2.8599E-6 *
+pow($decoded_metar['temperature']['temp_c'], 5)
+ ), 1);
}
- /* Finally we store our decoded METAR in $this->decoded_metar so
- * that other methods can use it.
- */
-
+ /* Finally we store our decoded METAR in $this->decoded_metar so
+ * that other methods can use it.
+ */
+
$this->decoded_metar = $decoded_metar;
return $decoded_metar;
}
_______________________________________________
PHPWeather-checkins mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/phpweather-checkins