public BandSetting this[BAND band] { get { DataRow row = this.Rows.Find(Bands.GetStringValue(band)); if (row != null) { BandSetting setting = new BandSetting(); try { // fill in the values from the bandsettings table setting.K_Factor = (double)row["K-FACTOR"]; setting.F1_Clearance = (double)row["F1-CLEARANCE"]; setting.GroundClearance = (double)row["GROUNDCLEARANCE"]; setting.MaxDistance = (double)row["MAXDISTANCE"]; setting.MaxSquint = (double)row["MAXSQUINT"]; setting.MaxElevation = (double)row["MAXELEVATION"]; } catch { } return(setting); } else { BandSetting setting = new BandSetting(); return(setting); } } }
public QRVDesignator(string call, string loc, BAND band, double antennaheight, double antennagain, double power, DateTime lastupdated) : this() { Call = call.ToUpper().Trim(); Loc = loc.ToUpper().Trim().Substring(0, 6); Band = band; AntennaHeight = antennaheight; AntennaGain = antennagain; Power = power; LastUpdated = lastupdated; }
public static string GetStringValue(BAND band) { string output = null; FieldInfo fi = typeof(BAND).GetField(band.ToString()); StringCustomAttribute[] attrs = fi.GetCustomAttributes(typeof(StringCustomAttribute), false) as StringCustomAttribute[]; if (attrs.Length > 0) { output = attrs[0].Value; } return(output); }
public static BAND Previous(BAND band) { BAND[] bands = Bands.GetValuesExceptNoneAndAll(); int i = Array.IndexOf(bands, band); if (i < 1) { i = 1; } else if (i > bands.Length - 1) { i = bands.Length - 1; } return(bands[i - 1]); }
public static BAND Next(BAND band) { BAND[] bands = Bands.GetValuesExceptNoneAndAll(); int i = Array.IndexOf(bands, band); if (i < 0) { i = 0; } else if (i > bands.Length - 2) { i = bands.Length - 2; } return(bands[i + 1]); }
public static BAND[] GetValuesExceptNoneAndAll() { BAND[] bands = (BAND[])Enum.GetValues(typeof(BAND)); BAND[] bandsexceptnoneandall = new BAND[bands.Length - 2]; int i = 0; foreach (BAND band in bands) { if ((band != BAND.BNONE) && (band != BAND.BALL)) { bandsexceptnoneandall[i] = band; i++; } } return(bandsexceptnoneandall); }
private string DeliverElevationPath(string paramstr) { string json = ""; // set default values string mycallstr = ""; string mylocstr = ""; string dxcallstr = ""; string dxlocstr = ""; BAND band = Properties.Settings.Default.Band; // get parameters try { if (paramstr.Contains("?")) { // OK, we have parameters --> cut them out and make all uppercase paramstr = paramstr.Substring(paramstr.IndexOf("?") + 1).ToUpper(); var pars = System.Web.HttpUtility.ParseQueryString(paramstr); mycallstr = pars.Get("MYCALL"); mylocstr = pars.Get("MYLOC"); dxcallstr = pars.Get("DXCALL"); dxlocstr = pars.Get("DXLOC"); } } catch (Exception ex) { // return error return("Error while parsing parameters!"); } // check parameters if (!Callsign.Check(mycallstr)) { return("Error: " + mycallstr + " is not a valid callsign!"); } if (!Callsign.Check(dxcallstr)) { return("Error: " + dxcallstr + " is not a valid callsign!"); } if (!String.IsNullOrEmpty(mylocstr) && !MaidenheadLocator.Check(mylocstr)) { return("Error: " + mylocstr + " is not a valid Maidenhead locator!"); } if (!String.IsNullOrEmpty(dxlocstr) && !MaidenheadLocator.Check(dxlocstr)) { return("Error: " + dxlocstr + " is not a valid Maidenhead locator!"); } // search call in station database, return empty string if not found LocationDesignator myloc = LocationFind(mycallstr, mylocstr); if (myloc == null) { return("Error: MyLocation not found in database!"); } LocationDesignator dxloc = LocationFind(dxcallstr, dxlocstr); if (dxloc == null) { return("Error: DXLocation not found in database!"); } // get qrv info or create default QRVDesignator myqrv = StationData.Database.QRVFindOrCreateDefault(myloc.Call, myloc.Loc, band); // set qrv defaults if zero if (myqrv.AntennaHeight == 0) { myqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band); } if (myqrv.AntennaGain == 0) { myqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band); } if (myqrv.Power == 0) { myqrv.Power = StationData.Database.QRVGetDefaultPower(band); } // get qrv info or create default QRVDesignator dxqrv = StationData.Database.QRVFindOrCreateDefault(dxloc.Call, dxloc.Loc, band); // set qrv defaults if zero if (dxqrv.AntennaHeight == 0) { dxqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band); } if (dxqrv.AntennaGain == 0) { dxqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band); } if (dxqrv.Power == 0) { dxqrv.Power = StationData.Database.QRVGetDefaultPower(band); } // get or calculate elevation path ElevationPathDesignator epath = ElevationData.Database.ElevationPathFindOrCreateFromLatLon( this, myloc.Lat, myloc.Lon, dxloc.Lat, dxloc.Lon, ElevationData.Database.GetDefaultStepWidth(Properties.Settings.Default.ElevationModel), Properties.Settings.Default.ElevationModel); if (epath == null) { return(json); } // add additional info to ppath epath.Location1 = myloc; epath.Location2 = dxloc; epath.QRV1 = myqrv; epath.QRV2 = dxqrv; // convert path to json json = epath.ToJSON(); return(json); }
private string DeliverQRV(string paramstr) { string json = ""; // set default values string callstr = ""; string locstr = ""; string bandstr = ""; BAND band = Properties.Settings.Default.Band; // get parameters try { if (paramstr.Contains("?")) { // OK, we have parameters --> cut them out and make all uppercase paramstr = paramstr.Substring(paramstr.IndexOf("?") + 1).ToUpper(); var pars = System.Web.HttpUtility.ParseQueryString(paramstr); callstr = pars.Get("CALL"); locstr = pars.Get("LOC"); bandstr = pars.Get("BAND"); } } catch (Exception ex) { // return error return("Error while parsing parameters!"); } // check parameters if (!Callsign.Check(callstr)) { return("Error: " + callstr + " is not a valid callsign!"); } if (!MaidenheadLocator.Check(locstr)) { return("Error: " + locstr + " is not a valid Maidenhead locator!"); } // set band to currently selected if empty if (string.IsNullOrEmpty(bandstr)) { band = Properties.Settings.Default.Band; } else { band = Bands.ParseStringValue(bandstr); } if (band == BAND.BNONE) { return("Error: " + bandstr + " is not a valid band value!"); } // search call in station database, return empty string if not found if (band != BAND.BALL) { QRVDesignator qrv = StationData.Database.QRVFind(callstr, locstr, band); if (qrv == null) { return("Error: QRV info not found in database!"); } json = qrv.ToJSON(); return(json); } List <QRVDesignator> qrvs = StationData.Database.QRVFind(callstr, locstr); if ((qrvs == null) || (qrvs.Count() == 0)) { return("Error: QRV info not found in database!"); } JsonSerializerSettings settings = new JsonSerializerSettings(); settings.DateTimeZoneHandling = DateTimeZoneHandling.Utc; settings.FloatFormatHandling = FloatFormatHandling.String; settings.Formatting = Newtonsoft.Json.Formatting.Indented; json = JsonConvert.SerializeObject(qrvs, settings); return(json); }
private void CalculateHorizons() { List <LocationDesignator> lds = StationData.Database.LocationGetAll(); foreach (LocationDesignator ld in lds) { Stopwatch st = new Stopwatch(); try { // short max = ElevationModel.Database.ElevationTilesMaxElevation(ELEVATIONMODEL.SRTM1, Properties.Settings.Default.MinLat, Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon); short max = 4797; ELEVATIONMODEL model = ELEVATIONMODEL.SRTM1; BAND band = BAND.B1_2G; short antenna_height = 40; short h1 = (short)(ElevationData.Database[ld.Lat, ld.Lon, model] + antenna_height); double dist = 500.0; double stepwidth = ElevationData.Database.GetDefaultStepWidth(model); int count = (int)(dist / stepwidth / 1000.0); HorizonPoint hp = new HorizonPoint(); st.Start(); List <HorizonPoint>[] l = new List <HorizonPoint> [360]; for (int j = 0; j < 360; j++) { Say("Calculation horizon of " + ld.Call + ": " + j + " of 360..."); l[j] = new List <HorizonPoint>(); ElevationPathDesignator path = new ElevationPathDesignator(); path = ElevationData.Database.ElevationPathCreateFromBearing(this, ld.Lat, ld.Lon, j, dist, stepwidth, model); short[] elv = path.Path; // iterate through frequencies foreach (int f in Enum.GetValues(typeof(BAND))) { double f1_clearance = 0.6; if (f <= 144) { f1_clearance = 0.2; } else if (f <= 432) { f1_clearance = 0.4; } hp = PropagationHorizonDesignator.EpsilonMaxFromPath(h1, ref elv, dist, stepwidth, f / 1000.0, f1_clearance, max, LatLon.Earth.Radius * 1.33); l[j].Add(hp); } hp = l[j].ElementAt(0); Application.DoEvents(); } st.Stop(); using (StreamWriter sw = new StreamWriter("Horizon.csv")) { sw.WriteLine("bearing[deg];eps_50M[deg];eps_70M[deg];eps[144M[deg];eps_432M[deg];eps_1.2G[deg];eps_2.3G[deg];eps_3.4G[deg];eps_5.7G[deg];eps_10G[deg];eps_24G[deg];eps_47G[deg];eps_76G[deg]"); for (int j = 0; j < l.Length; j++) { sw.Write(j + ";"); for (int k = 0; k < l[0].Count; k++) { sw.Write((l[j].ElementAt(k).Epsmin / Math.PI * 180.0).ToString("F8")); if (k < l[0].Count - 1) { sw.Write(";"); } } sw.WriteLine(); } } } catch (Exception ex) { } } }
public static string GetName(BAND band) { return(Enum.GetName(typeof(BAND), band)); }
public QRVDesignator(string call, string loc, BAND band) : this(call, loc, band, 0, 0, 0) { }
public static double ToMHz(BAND band) { return((int)band); }
public static double To100Hz(BAND band) { return((int)band * 10000.0); }
public QRVDesignator(string call, string loc, BAND band, double antennaheight, double antennagain, double power) : this(call, loc, band, antennaheight, antennagain, power, DateTime.UtcNow) { }
private string DeliverPropagationPath(string paramstr) { string json = ""; // set default values string mycallstr = ""; string mylocstr = ""; string dxcallstr = ""; string dxlocstr = ""; string bandstr = ""; BAND band = Properties.Settings.Default.Band; // get parameters try { if (paramstr.Contains("?")) { // OK, we have parameters --> cut them out and make all uppercase paramstr = paramstr.Substring(paramstr.IndexOf("?") + 1).ToUpper(); var pars = System.Web.HttpUtility.ParseQueryString(paramstr); mycallstr = pars.Get("MYCALL"); mylocstr = pars.Get("MYLOC"); dxcallstr = pars.Get("DXCALL"); dxlocstr = pars.Get("DXLOC"); bandstr = pars.Get("BAND"); } } catch (Exception ex) { // return error return("Error while parsing parameters!"); } // check parameters if (!Callsign.Check(mycallstr)) { return("Error: " + mycallstr + " is not a valid callsign!"); } if (!Callsign.Check(dxcallstr)) { return("Error: " + dxcallstr + " is not a valid callsign!"); } if (!String.IsNullOrEmpty(mylocstr) && !MaidenheadLocator.Check(mylocstr)) { return("Error: " + mylocstr + " is not a valid Maidenhead locator!"); } if (!String.IsNullOrEmpty(dxlocstr) && !MaidenheadLocator.Check(dxlocstr)) { return("Error: " + dxlocstr + " is not a valid Maidenhead locator!"); } // set band to currently selected if empty if (string.IsNullOrEmpty(bandstr)) { band = Properties.Settings.Default.Band; } else { band = Bands.ParseStringValue(bandstr); } if (band == BAND.BNONE) { return("Error: " + bandstr + " is not a valid band value!"); } // search call in station database, return empty string if not found LocationDesignator myloc = LocationFind(mycallstr, mylocstr); if (myloc == null) { return("Error: MyLocation not found in database!"); } LocationDesignator dxloc = LocationFind(dxcallstr, dxlocstr); if (dxloc == null) { return("Error: DXLocation not found in database!"); } // get qrv info or create default QRVDesignator myqrv = StationData.Database.QRVFindOrCreateDefault(myloc.Call, myloc.Loc, band); // set qrv defaults if zero if (myqrv.AntennaHeight == 0) { myqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band); } if (myqrv.AntennaGain == 0) { myqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band); } if (myqrv.Power == 0) { myqrv.Power = StationData.Database.QRVGetDefaultPower(band); } // get qrv info or create default QRVDesignator dxqrv = StationData.Database.QRVFindOrCreateDefault(dxloc.Call, dxloc.Loc, band); // set qrv defaults if zero if (dxqrv.AntennaHeight == 0) { dxqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band); } if (dxqrv.AntennaGain == 0) { dxqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band); } if (dxqrv.Power == 0) { dxqrv.Power = StationData.Database.QRVGetDefaultPower(band); } // find local obstruction, if any LocalObstructionDesignator o = ElevationData.Database.LocalObstructionFind(myloc.Lat, myloc.Lon, Properties.Settings.Default.ElevationModel); double mybearing = LatLon.Bearing(myloc.Lat, myloc.Lon, dxloc.Lat, dxloc.Lon); double myobstr = (o != null) ? o.GetObstruction(myqrv.AntennaHeight, mybearing) : double.MinValue; // get or calculate propagation path PropagationPathDesignator ppath = PropagationData.Database.PropagationPathFindOrCreateFromLatLon( this, myloc.Lat, myloc.Lon, GetElevation(myloc.Lat, myloc.Lon) + myqrv.AntennaHeight, dxloc.Lat, dxloc.Lon, GetElevation(dxloc.Lat, dxloc.Lon) + dxqrv.AntennaHeight, Bands.ToGHz(band), LatLon.Earth.Radius * Properties.Settings.Default.Path_Band_Settings[band].K_Factor, Properties.Settings.Default.Path_Band_Settings[band].F1_Clearance, ElevationData.Database.GetDefaultStepWidth(Properties.Settings.Default.ElevationModel), Properties.Settings.Default.ElevationModel, myobstr); if (ppath == null) { return(json); } // add additional info to ppath ppath.Location1 = myloc; ppath.Location2 = dxloc; ppath.QRV1 = myqrv; ppath.QRV2 = dxqrv; // convert path to json json = ppath.ToJSON(); return(json); }
private string DeliverNearestPlanes(string paramstr, List <PlaneInfo> allplanes) { string json = ""; // set default values string mycallstr = ""; string mylocstr = ""; string dxcallstr = ""; string dxlocstr = ""; string bandstr = ""; BAND band = Properties.Settings.Default.Band; // get parameters try { if (paramstr.Contains("?")) { // OK, we have parameters --> cut them out and make all uppercase paramstr = paramstr.Substring(paramstr.IndexOf("?") + 1).ToUpper(); var pars = System.Web.HttpUtility.ParseQueryString(paramstr); mycallstr = pars.Get("MYCALL"); mylocstr = pars.Get("MYLOC"); dxcallstr = pars.Get("DXCALL"); dxlocstr = pars.Get("DXLOC"); bandstr = pars.Get("BAND"); } } catch (Exception ex) { // return error return("Error while parsing parameters!"); } // check parameters if (!Callsign.Check(mycallstr)) { return("Error: " + mycallstr + " is not a valid callsign!"); } if (!Callsign.Check(dxcallstr)) { return("Error: " + dxcallstr + " is not a valid callsign!"); } if (!String.IsNullOrEmpty(mylocstr) && !MaidenheadLocator.Check(mylocstr)) { return("Error: " + mylocstr + " is not a valid Maidenhead locator!"); } if (!String.IsNullOrEmpty(dxlocstr) && !MaidenheadLocator.Check(dxlocstr)) { return("Error: " + dxlocstr + " is not a valid Maidenhead locator!"); } // set band to currently selected if empty if (string.IsNullOrEmpty(bandstr)) { band = Properties.Settings.Default.Band; } else { band = Bands.ParseStringValue(bandstr); } if (band == BAND.BNONE) { return("Error: " + bandstr + " is not a valid band value!"); } // search call in station database, return empty string if not found LocationDesignator myloc = LocationFind(mycallstr, mylocstr); if (myloc == null) { return("Error: MyLocation not found in database!"); } LocationDesignator dxloc = LocationFind(dxcallstr, dxlocstr); if (dxloc == null) { return("Error: DXLocation not found in database!"); } // get qrv info or create default QRVDesignator myqrv = StationData.Database.QRVFindOrCreateDefault(myloc.Call, myloc.Loc, band); // set qrv defaults if zero if (myqrv.AntennaHeight == 0) { myqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band); } if (myqrv.AntennaGain == 0) { myqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band); } if (myqrv.Power == 0) { myqrv.Power = StationData.Database.QRVGetDefaultPower(band); } // get qrv info or create default QRVDesignator dxqrv = StationData.Database.QRVFindOrCreateDefault(dxloc.Call, dxloc.Loc, band); // set qrv defaults if zero if (dxqrv.AntennaHeight == 0) { dxqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band); } if (dxqrv.AntennaGain == 0) { dxqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band); } if (dxqrv.Power == 0) { dxqrv.Power = StationData.Database.QRVGetDefaultPower(band); } // find local obstruction, if any LocalObstructionDesignator o = ElevationData.Database.LocalObstructionFind(myloc.Lat, myloc.Lon, Properties.Settings.Default.ElevationModel); double mybearing = LatLon.Bearing(myloc.Lat, myloc.Lon, dxloc.Lat, dxloc.Lon); double myobstr = (o != null) ? o.GetObstruction(myqrv.AntennaHeight, mybearing) : double.MinValue; // get or calculate propagation path PropagationPathDesignator ppath = PropagationData.Database.PropagationPathFindOrCreateFromLatLon( this, myloc.Lat, myloc.Lon, GetElevation(myloc.Lat, myloc.Lon) + myqrv.AntennaHeight, dxloc.Lat, dxloc.Lon, GetElevation(dxloc.Lat, dxloc.Lon) + dxqrv.AntennaHeight, Bands.ToGHz(band), LatLon.Earth.Radius * Properties.Settings.Default.Path_Band_Settings[band].K_Factor, Properties.Settings.Default.Path_Band_Settings[band].F1_Clearance, ElevationData.Database.GetDefaultStepWidth(Properties.Settings.Default.ElevationModel), Properties.Settings.Default.ElevationModel, myobstr); if (ppath == null) { return(json); } // add additional info to ppath ppath.Location1 = myloc; ppath.Location2 = dxloc; ppath.QRV1 = myqrv; ppath.QRV2 = dxqrv; /* * // estimate positions according to time * DateTime time = DateTime.UtcNow; * foreach(PlaneInfo plane in allplanes.Planes) * { * // change speed to km/h * double speed = plane.Speed_kmh; * // calculate distance after timespan * double dist = speed * (time - allplanes.At).TotalHours; * LatLon.GPoint newpos = LatLon.DestinationPoint(plane.Lat, plane.Lon, plane.Track, dist); * plane.Lat = newpos.Lat; * plane.Lon = newpos.Lon; * plane.Time = time; * } */ // get nearest planes List <PlaneInfo> nearestplanes = AircraftData.Database.GetNearestPlanes(DateTime.UtcNow, ppath, allplanes, Properties.Settings.Default.Planes_Filter_Max_Circumcircle, Properties.Settings.Default.Path_Band_Settings[band].MaxDistance, Properties.Settings.Default.Planes_MaxAlt); // convert nearestplanes to json JsonSerializerSettings settings = new JsonSerializerSettings(); settings.DateTimeZoneHandling = DateTimeZoneHandling.Utc; settings.FloatFormatHandling = FloatFormatHandling.String; settings.Formatting = Newtonsoft.Json.Formatting.Indented; json = JsonConvert.SerializeObject(nearestplanes, settings); return(json); }
public static double ToGHz(BAND band) { return((int)band / 1000.0); }