public LocationDesignator LocationFind(string call, string loc = "") { // check all parameters if (!Callsign.Check(call)) { return(null); } if (!String.IsNullOrEmpty(loc) && !MaidenheadLocator.Check(loc)) { return(null); } // get location info LocationDesignator ld = (String.IsNullOrEmpty(loc)) ? StationData.Database.LocationFind(call) : StationData.Database.LocationFind(call, loc); // return null if not found if (ld == null) { return(null); } // get elevation ld.Elevation = GetElevation(ld.Lat, ld.Lon); ld.BestCaseElevation = false; // modify location in case of best case elevation is selected --> but do not store in database or settings! if (Properties.Settings.Default.Path_BestCaseElevation) { if (!MaidenheadLocator.IsPrecise(ld.Lat, ld.Lon, 3)) { ElvMinMaxInfo maxinfo = GetMinMaxElevationLoc(ld.Loc); if (maxinfo != null) { ld.Lat = maxinfo.MaxLat; ld.Lon = maxinfo.MaxLon; ld.Elevation = maxinfo.MaxElv; ld.BestCaseElevation = true; } } } return(ld); }
private void tb_Locator_TextChanged(object sender, EventArgs e) { // update lat/lon double mlat, mlon; if (tb_Locator.Focused) { // locator box is focused --> update lat/lon if (MaidenheadLocator.Check(tb_Locator.Text) && tb_Locator.Text.Length >= 6) { MaidenheadLocator.LatLonFromLoc(tb_Locator.Text, PositionInRectangle.MiddleMiddle, out mlat, out mlon); tb_Latitude.SilentValue = mlat; tb_Longitude.SilentValue = mlon; } else { tb_Latitude.SilentValue = double.NaN; tb_Longitude.SilentValue = double.NaN; } } ValidateDetails(); }
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); }
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 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 string DeliverLocation(string paramstr) { string json = ""; // set default values string callstr = ""; string locstr = ""; // 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"); } } catch (Exception ex) { // return error return("Error while parsing parameters!"); } // check parameters if (!Callsign.Check(callstr)) { return("Error: " + callstr + " is not a valid callsign!"); } LocationDesignator ld = null; // locstr == null or empty --> return last recent location if (String.IsNullOrEmpty(locstr)) { ld = LocationFind(callstr); if (ld == null) { return("Error: Location not found in database!"); } json = ld.ToJSON(); return(json); } if (locstr == "ALL") { List <LocationDesignator> l = LocationFindAll(callstr); if (l == null) { return("Error: Location not found in database!"); } JsonSerializerSettings settings = new JsonSerializerSettings(); settings.DateTimeZoneHandling = DateTimeZoneHandling.Utc; settings.FloatFormatHandling = FloatFormatHandling.String; settings.Formatting = Newtonsoft.Json.Formatting.Indented; settings.Culture = CultureInfo.InvariantCulture; json = JsonConvert.SerializeObject(l, settings); return(json); } if (!MaidenheadLocator.Check(locstr)) { return("Error: " + locstr + " is not a valid Maidenhead locator!"); } // search call in station database, return empty string if not found ld = LocationFind(callstr, locstr); if (ld == null) { return("Error: Location not found in database!"); } json = ld.ToJSON(); return(json); }
private bool ValidateDetails() { // validates user details and sets position on map // enables/disables next button double mlat, mlon; // colour Textbox if more precise lat/lon information is available if (MaidenheadLocator.IsPrecise(tb_Latitude.Value, tb_Longitude.Value, 3)) { if (tb_Locator.BackColor != Color.PaleGreen) { tb_Locator.BackColor = Color.PaleGreen; } } else { if (tb_Locator.BackColor != Color.FloralWhite) { tb_Locator.BackColor = Color.FloralWhite; } } if (GeographicalPoint.Check(tb_Latitude.Value, tb_Longitude.Value)) { // update locator text if not focusd if (!tb_Locator.Focused) { tb_Locator.SilentText = MaidenheadLocator.LocFromLatLon(tb_Latitude.Value, tb_Longitude.Value, Properties.Settings.Default.Locator_SmallLettersForSubsquares, (int)Properties.Settings.Default.Locator_MaxLength / 2, true); } // get locator polygon Callsignpolygons.Clear(); List <PointLatLng> l = new List <PointLatLng>(); // add loc bounds to map polygons MaidenheadLocator.LatLonFromLoc(tb_Locator.Text, PositionInRectangle.TopLeft, out mlat, out mlon); l.Add(new PointLatLng(mlat, mlon)); MaidenheadLocator.LatLonFromLoc(tb_Locator.Text, PositionInRectangle.TopRight, out mlat, out mlon); l.Add(new PointLatLng(mlat, mlon)); MaidenheadLocator.LatLonFromLoc(tb_Locator.Text, PositionInRectangle.BottomRight, out mlat, out mlon); l.Add(new PointLatLng(mlat, mlon)); MaidenheadLocator.LatLonFromLoc(tb_Locator.Text, PositionInRectangle.BottomLeft, out mlat, out mlon); l.Add(new PointLatLng(mlat, mlon)); GMapPolygon p = new GMapPolygon(l, tb_Locator.Text.ToString()); p.Stroke = new Pen(Color.FromArgb(255, Color.Magenta), 3); p.Fill = new SolidBrush(Color.FromArgb(0, Color.Magenta)); Callsignpolygons.Polygons.Add(p); // update user position UserPos.Position = new PointLatLng(tb_Latitude.Value, tb_Longitude.Value); // update map position if (!IsDraggingMarker) { string loc = MaidenheadLocator.LocFromLatLon(tb_Latitude.Value, tb_Longitude.Value, Properties.Settings.Default.Locator_SmallLettersForSubsquares, (int)Properties.Settings.Default.Locator_MaxLength / 2, true); MaidenheadLocator.LatLonFromLoc(loc, PositionInRectangle.MiddleMiddle, out mlat, out mlon); gm_Callsign.Position = new PointLatLng(mlat, mlon); // adjust map zoom level int zoom = loc.Length; switch (zoom) { case 6: gm_Callsign.Zoom = 12; break; case 8: gm_Callsign.Zoom = 15; break; case 10: gm_Callsign.Zoom = 17; break; } } } // check all values if (Callsign.Check(tb_Callsign.Text) && MaidenheadLocator.Check(tb_Locator.Text) && !double.IsNaN(tb_Latitude.Value) && !double.IsNaN(tb_Longitude.Value)) { StationLocation.Lat = tb_Latitude.Value; StationLocation.Lon = tb_Longitude.Value; StationLocation.Source = MaidenheadLocator.IsPrecise(tb_Latitude.Value, tb_Longitude.Value, 3) ? GEOSOURCE.FROMUSER : GEOSOURCE.FROMLOC; StationLocation.Loc = MaidenheadLocator.LocFromLatLon(StationLocation.Lat, StationLocation.Lon, false, 3); tb_Elevation.SilentValue = GetElevation(StationLocation.Lat, StationLocation.Lon); return(true); } else { return(false); } }
public DataTableCallsigns FromCSV(string filename) { // imports a variable csv format with autodetect of callsign, loc and timestamp DataTableCallsigns dt = new DataTableCallsigns(); if (!File.Exists(filename)) { return(dt); } try { string s = ""; using (StreamReader sr = new StreamReader(File.OpenRead(filename))) { while (!sr.EndOfStream) { s = sr.ReadLine(); if (!String.IsNullOrEmpty(s) && !s.StartsWith("//")) { string[] a = s.Split(';'); if (a.Length < 2) { a = s.Split(','); } string call = ""; double lat = double.NaN; double lon = double.NaN; string loc = ""; GEOSOURCE source = GEOSOURCE.FROMLOC; // set lastupdated to filetime if no timestamp is found on file string filetime = File.GetCreationTimeUtc(filename).ToString("u"); string lastupdated = filetime; foreach (string entry in a) { // search for 1st locator in line if (MaidenheadLocator.Check(entry) && (entry.Length == 6) && String.IsNullOrEmpty(loc)) { MaidenheadLocator.LatLonFromLoc(entry, PositionInRectangle.MiddleMiddle, out lat, out lon); break; } // search for 1st callsign in line if (Callsign.Check(entry) && String.IsNullOrEmpty(call)) { call = entry.Trim().ToUpper(); } DateTime timestamp; if (DateTime.TryParseExact(entry, "yyyy-MM-dd HH:mm:ssZ", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out timestamp)) { lastupdated = timestamp.ToString("u"); } } if (GeographicalPoint.Check(lat, lon)) { // store array values in DataTable DataRow row = dt.NewRow(); row["Call"] = call; row["Lat"] = lat; row["Lon"] = lon; row["Source"] = source.ToString(); row["LastUpdated"] = lastupdated; DataRow oldrow = dt.Rows.Find(row["Call"].ToString()); if (oldrow != null) { // call found --> check for update if (String.Compare(row["LastUpdated"].ToString(), oldrow["LastUpdated"].ToString()) > 0) { oldrow["Lat"] = row["Lat"]; oldrow["Lon"] = row["Lon"]; oldrow["Source"] = row["Source"]; oldrow["LastUpdated"] = row["LastUpdated"]; } } else { // add new row dt.Rows.Add(row); } } } } } } catch { } return(dt); }
public DataTableCallsigns FromDTB(string filename) { // imports DTB database from Win-Test DataTableCallsigns dt = new DataTableCallsigns(); if (!File.Exists(filename)) { return(dt); } try { using (StreamReader sr = new StreamReader(File.OpenRead(filename))) { while (!sr.EndOfStream) { char[] buffer = new char[26]; sr.ReadBlock(buffer, 0, 14); sr.ReadBlock(buffer, 14, 12); if (!sr.EndOfStream) { string call = ""; string loc = ""; string lastupdated = ""; double lat = double.NaN; double lon = double.NaN; int i = 0; while ((buffer[i] != 0) && (i < 14)) { call += (char)buffer[i]; i++; } i = 14; while ((i < 21) && (buffer[i] != 0)) { loc += (char)buffer[i]; i++; } i = 21; while ((i < 26) && (buffer[i] != 0)) { lastupdated += (char)buffer[i]; i++; } call = call.Trim().ToUpper(); loc = loc.Trim().ToUpper(); try { if (lastupdated[2] < '5') { lastupdated = "20" + lastupdated[2] + lastupdated[3] + "-" + lastupdated[0] + lastupdated[1] + "-01 00:00:00Z"; } else { lastupdated = "19" + lastupdated[2] + lastupdated[3] + "-" + lastupdated[0] + lastupdated[1] + "-01 00:00:00Z"; } } catch { } if (MaidenheadLocator.Check(loc)) { MaidenheadLocator.LatLonFromLoc(loc, PositionInRectangle.MiddleMiddle, out lat, out lon); } GEOSOURCE source = GEOSOURCE.FROMLOC; if (GeographicalPoint.Check(lat, lon)) { DataRow row = dt.NewRow(); row["Call"] = call; row["Lat"] = lat; row["Lon"] = lon; row["Source"] = source.ToString(); row["LastUpdated"] = lastupdated; DataRow oldrow = dt.Rows.Find(row["Call"].ToString()); if (oldrow != null) { // call found --> check for update if (String.Compare(row["LastUpdated"].ToString(), oldrow["LastUpdated"].ToString()) > 0) { oldrow["Lat"] = row["Lat"]; oldrow["Lon"] = row["Lon"]; oldrow["Source"] = row["Source"]; oldrow["LastUpdated"] = row["LastUpdated"]; } } else { // add new row dt.Rows.Add(row); } } } } } } catch (Exception ex) { } return(dt); }
public DataTableCallsigns FromCALL3(string filename) { // imports CALL3.TXT as used by WSJT // fields are // CALLSIGN, LOCATOR, EME FLAG, (these first three fields are used by WSJT) // plus optional fields: // STATE, FIRST NAME, EMAIL ADDRESS, NOTES, REVISION DATE DataTableCallsigns dt = new DataTableCallsigns(); if (!File.Exists(filename)) { return(dt); } try { string s = ""; using (StreamReader sr = new StreamReader(File.OpenRead(filename))) { while (!sr.EndOfStream) { s = sr.ReadLine(); if (!String.IsNullOrEmpty(s) && !s.StartsWith("//")) { string[] a = s.Split(','); // store array values in DataTable string call = a[0]; string loc = a[1]; double lat = double.NaN; double lon = double.NaN; if (MaidenheadLocator.Check(loc)) { MaidenheadLocator.LatLonFromLoc(loc, PositionInRectangle.MiddleMiddle, out lat, out lon); } GEOSOURCE source = GEOSOURCE.FROMLOC; DateTime lastupdated = DateTime.MinValue.ToUniversalTime(); if (a.Length >= 7) { // try to get an revision date maybe in various formats // MMMonVHF try { lastupdated = DateTime.ParseExact(a[7], "MM/yy", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); } catch (Exception ex) { } } if (GeographicalPoint.Check(lat, lon)) { DataRow row = dt.NewRow(); row["Call"] = call; row["Lat"] = lat; row["Lon"] = lon; row["Source"] = source.ToString(); row["LastUpdated"] = lastupdated.ToString("u"); DataRow oldrow = dt.Rows.Find(row["Call"].ToString()); if (oldrow != null) { // call found --> check for update if (String.Compare(row["LastUpdated"].ToString(), oldrow["LastUpdated"].ToString()) > 0) { oldrow["Lat"] = row["Lat"]; oldrow["Lon"] = row["Lon"]; oldrow["Source"] = row["Source"]; oldrow["LastUpdated"] = row["LastUpdated"]; } } else { // add new row dt.Rows.Add(row); } } } } } } catch (Exception ex) { } return(dt); }