<?php
// -----------------------------------------------------------
// ------ Formelsammlung Wetter
// -----------------------------------------------------------
// ------ QNH: Luftdruckangabe auf Meereshöhe nach einer Standardatmosphäre (nach ICAO) reduziert (Flughäfen, CWOP-Stationen, APRS)
// nach http://dk0te.ba-ravensburg.de/cgi-bin/navi?m=WX_BAROMETER
function getQNH($Temperature, $AirPressureAbsolute, $Altitude)
{
$g_n = 9.80665; // Erdbeschleunigung (m/s^2)
$gam = 0.0065; // Temperaturabnahme in K pro geopotentiellen Metern (K/gpm)
$R = 287.06; // Gaskonstante für trockene Luft (R = R_0 / M)
$M = 0.0289644; // Molare Masse trockener Luft (J/kgK)
$R_0 = 8.314472; // allgemeine Gaskonstante (J/molK)
$T_0 = 273.15; // Umrechnung von °C in K
$p = $AirPressureAbsolute * pow( (($gam * $Altitude + $Temperature + $T_0) / ($Temperature + $T_0)), ($g_n / ($R * $gam)) );
return $p;
}
// ------ QFF: Luftdruckangabe auf Meereshöhe umgerechnet (DWD)
// nach http://dk0te.ba-ravensburg.de/cgi-bin/navi?m=WX_BAROMETER
function getQFF($Temperature, $AirPressureAbsolute, $Altitude, $Humidity)
{
$g_n = 9.80665; // Erdbeschleunigung (m/s^2)
$gam = 0.0065; // Temperaturabnahme in K pro geopotentiellen Metern (K/gpm)
$R = 287.06; // Gaskonstante für trockene Luft (R = R_0 / M)
$M = 0.0289644; // Molare Masse trockener Luft (J/kgK)
$R_0 = 8.314472; // allgemeine Gaskonstante (J/molK)
$T_0 = 273.15; // Umrechnung von °C in K
$C = 0.11; // DWD-Beiwert für die Berücksichtigung der Luftfeuchte
$E_0 = 6.11213; // (hPa)
$f_rel = $Humidity / 100; // relative Luftfeuchte (0-1.0)
// momentaner Stationsdampfdruck (hPa)
$e_d = $f_rel * $E_0 * exp((17.5043 * $Temperature) / (241.2 + $Temperature));
$p = $AirPressureAbsolute * exp(($g_n * $Altitude) / ($R * ($Temperature + $T_0 + $C * $e_d + (($gam * $Altitude) / 2))));
return $p;
}
// ------ Relativer Luftdruck
// nach barometrischer Höhenformel von Wikipedia
function getRelativeAirPressure($AirPressureAbsolute, $Temperature, $Altitude)
{
$g0 = 9.80665; // Normwert der Fallbeschleunigung
$R = 287.05; // Gaskonstante trockener Luft
$T = 273.15; // 0°C in Kelvin
$Ch = 0.12; // Beiwert zu E
$a = 0.0065; // vertikaler Temperaturgradient
$E = 0;
if($Temperature < 9.1)
{
$E = 5.6402 * (-0.0916 + exp(0.06 * $Temperature)); // Dampfdruck des Wasserdampfanteils bei t < 9.1°C
}
else
{
$E = 18.2194 * (1.0463 - exp(-0.0666 * $Temperature)); // Dampfdruck des Wasserdampfanteils bei t >= 9.1°C
}
$xp = $Altitude * $g0 / ($R * ($T + $Temperature + $Ch * $E + $a * $Altitude / 2)); // Exponent für Formel
$p0 = $AirPressureAbsolute * exp($xp); // Formel für den NN-bezogenen Luftdruck
return $p0;
}
// ------ Windchill
// nach http://www.msc.ec.gc.ca/education/windchill/science_equations_e.cfm
function getWindChill($WindSpeed, $Temperature)
{
$WindChill = (($WindSpeed / 3.6) > 1.4) ? (13.12 + (0.6215 * $Temperature) - (11.37 * pow($WindSpeed, 0.16)) + (0.3965 * $Temperature * pow($WindSpeed, 0.16))) : $Temperature;
return $WindChill;
}
// ------ Taupunkt
// nach http://www.wettermail.de/wetter/feuchte.html
function getDewPoint($Temperature, $Humidity)
{
$a = 0; $b = 0;
if($Temperature >= 0) { $a = 7.5; $b = 237.3; }
else { $a = 7.6; $b = 240.7; }
$sdd = 6.1078 * pow(10.0, (($a * $Temperature) / ($b + $Temperature))); // Sättigungsdampfdruck
$dd = ($Humidity / 100.0) * $sdd; // Dampfdruck
$v = 0;
if($dd)
{
$v = log10(($dd/6.1078));
}
$td = ($b * $v) / ($a - $v); // Taupunkt
return $td;
}
// ------ Windstärke in Bft
// nach Tabelle von Wikipedia
function getWindStrength($WindSpeed)
{
$WindSpeedMS = $WindSpeed / 3.6;
$WindStrengths = array(0.3, 1.6, 3.4, 5.5, 8.0, 10.8, 13.9, 17.2, 20.8, 24.5, 28.5, 32.7);
$WindStrength = 0;
for($i = 0; $i < count($WindStrengths); $i++)
{
if($WindSpeedMS < $WindStrengths[$i]) break;
$WindStrength++;
}
return $WindStrength;
}
// ------ Windstärkenbeschreibung
function getWindStrengthDescription($WindStrength)
{
$WindStrengthDescriptions = array("Windstille", "leiser Zug", "leichte Brise", "schwache Brise", "mäßige Brise", "frische Brise",
"starker Wind", "steifer Wind", "stürmischer Wind", "Sturm", "schwerer Sturm", "orkanartiger Sturm", "Orkan");
return $WindStrengthDescriptions[$WindStrength];
}
// ------ Windrichtungsname
function getWindDirectionName($WindDirection)
{
$WindDirectionNames = array("N", "NNO", "NO", "ONO", "O", "OSO", "SO", "SSO", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW");
$WindDirectionName = $WindDirectionNames[(int)(round($WindDirection / 22.5))];
return $WindDirectionName;
}
?>