public static double Calculate(double elevation, Atmosphere atmosphere) { double temperature = atmosphere.Temperature; double pressure = atmosphere.Pressure; double humidity = atmosphere.Humidity; // Process the input values double tf = 1.0*temperature; // temperature, deg F humidity = 1.0*humidity; // relative humidity, % pressure = 1.0*pressure; // altimeter setting, in-Hg double z = 1.0*elevation; // geometric elevation, feet // Convert to metric units const double MB_PER_IN = 33.86389; const double M_PER_FT = 0.304800; double tc = (5.0/9.0)*(tf - 32); double altsetmb = pressure*MB_PER_IN; double zm = z*M_PER_FT; // Calculate the vapor pressures (mb) given the ambient temperature (c) and relative humidity (c) double esmb = CalcVaporPressureWobus(tc); double emb = esmb*humidity/100; // Calculate geopotential altitude H (m) from geometric altitude (m) Z double hm = CalcH(zm); // Calculate the absolute pressure given the altimeter setting(mb) and geopotential elevation(meters) double actpressmb = CalcAs2Press(altsetmb, hm); // Calculate the air density (kg/m3) from absolute pressure (mb) vapor pressure (mb) and temp (c) double density = CalcDensity(actpressmb, emb, tc); // double relden = 100*(density/1.225); // Calculate the geopotential altitude (m) in ISA with that same density (kg/m3) double densaltm = CalcAltitude(density); // Calculate geometric altitude Z (m) from geopotential altitude (m) H double densaltzm = CalcZ(densaltm); // Convert Units for output // const double IN_PER_MB = (1/33.86389); // double actpress = actpressmb*IN_PER_MB; const double FT_PER_M = (1/0.304800); double densalt = densaltzm*FT_PER_M; return RoundNum(densalt, 0); }
public Conditions GetConditions() { var doc = XDocument.Load(uri.AbsoluteUri); doc.Save("results.xml"); const string WEATHER = "{http://xml.weather.yahoo.com/ns/rss/1.0}"; const string GEO = "{http://www.w3.org/2003/01/geo/wgs84_pos#}"; const string ATMOSPHERE = "{0}atmosphere"; const string CONDITION = "{0}condition"; const string LATITUDE = "{0}lat"; const string LONGITUDE = "{0}long"; var atmosphere = doc.Descendants(string.Format(ATMOSPHERE, WEATHER)).FirstOrDefault(); var hAttribute = atmosphere.Attribute("humidity"); var pAttribute = atmosphere.Attribute("pressure"); if (hAttribute == null || pAttribute == null) { return Conditions.Empty; } var h = double.Parse(hAttribute.Value); var p = double.Parse(pAttribute.Value); XElement condition = doc.Descendants(string.Format(CONDITION, WEATHER)).FirstOrDefault(); var tAttribute = condition.Attribute("temp"); if (tAttribute == null) { return Conditions.Empty; } var t = double.Parse(tAttribute.Value); XElement latitude = doc.Descendants(string.Format(LATITUDE, GEO)).FirstOrDefault(); XElement longitude = doc.Descendants(string.Format(LONGITUDE, GEO)).FirstOrDefault(); var lat = new Latitude(double.Parse(latitude.Value)); var lon = new Longitude(double.Parse(longitude.Value)); var a = new Atmosphere(t, h, p); var l = new Location(lat, lon); return new Conditions(a, l); }