public DateTime PropagationPathFindLastUpdated(PropagationPathDesignator path, ELEVATIONMODEL model) { System.Data.SQLite.SQLiteDatabase db = GetPropagationDatabase(model); lock (db.DBCommand) { db.DBCommand.CommandText = "SELECT LastUpdated FROM " + PropagationPathDesignator.TableName + " WHERE Lat1 = @Lat1 AND Lon1 = @Lon1 AND h1 = @h1 AND Lat2 = @Lat2 AND Lon2 = @Lon2 AND h2 = @h2 AND QRG = @QRG AND Radius = @Radius AND F1_Clearance = @F1_Clearance AND StepWidth = @StepWidth"; db.DBCommand.Parameters.Clear(); db.DBCommand.Parameters.Add(path.AsDouble("Lat1")); db.DBCommand.Parameters.Add(path.AsDouble("Lon1")); db.DBCommand.Parameters.Add(path.AsDouble("h1")); db.DBCommand.Parameters.Add(path.AsDouble("Lat2")); db.DBCommand.Parameters.Add(path.AsDouble("Lon2")); db.DBCommand.Parameters.Add(path.AsDouble("h2")); db.DBCommand.Parameters.Add(path.AsDouble("QRG")); db.DBCommand.Parameters.Add(path.AsDouble("Radius")); db.DBCommand.Parameters.Add(path.AsDouble("F1_Clearance")); db.DBCommand.Parameters.Add(path.AsDouble("StepWidth")); object result = db.ExecuteScalar(db.DBCommand); if (result != null) { return(SQLiteEntry.UNIXTimeToDateTime((int)result)); } } return(DateTime.MinValue); }
public PropagationPathDesignator PropagationPathFind(PropagationPathDesignator path, ELEVATIONMODEL model) { System.Data.SQLite.SQLiteDatabase db = GetPropagationDatabase(model); // save localobstruction double obstr = path.LocalObstruction; lock (db.DBCommand) { db.DBCommand.CommandText = "SELECT * FROM " + PropagationPathDesignator.TableName + " WHERE Lat1 = @Lat1 AND Lon1 = @Lon1 AND h1 = @h1 AND Lat2 = @Lat2 AND Lon2 = @Lon2 AND h2 = @h2 AND QRG = @QRG AND Radius = @Radius AND F1_Clearance = @F1_Clearance AND StepWidth = @StepWidth"; db.DBCommand.Parameters.Clear(); db.DBCommand.Parameters.Add(path.AsDouble("Lat1")); db.DBCommand.Parameters.Add(path.AsDouble("Lon1")); db.DBCommand.Parameters.Add(path.AsDouble("h1")); db.DBCommand.Parameters.Add(path.AsDouble("Lat2")); db.DBCommand.Parameters.Add(path.AsDouble("Lon2")); db.DBCommand.Parameters.Add(path.AsDouble("h2")); db.DBCommand.Parameters.Add(path.AsDouble("QRG")); db.DBCommand.Parameters.Add(path.AsDouble("Radius")); db.DBCommand.Parameters.Add(path.AsDouble("F1_Clearance")); db.DBCommand.Parameters.Add(path.AsDouble("StepWidth")); DataTable Result = db.Select(db.DBCommand); if ((Result != null) && (Result.Rows.Count > 0)) { return(new PropagationPathDesignator(Result.Rows[0], obstr)); } } return(null); }
public bool PropagationPathExists(PropagationPathDesignator path, ELEVATIONMODEL model) { System.Data.SQLite.SQLiteDatabase db = GetPropagationDatabase(model); lock (db.DBCommand) { db.DBCommand.CommandText = "SELECT EXISTS (SELECT LastUpdated FROM " + PropagationPathDesignator.TableName + " WHERE Lat1 = @Lat1 AND Lon1 = @Lon1 AND h1 = @h1 AND Lat2 = @Lat2 AND Lon2 = @Lon2 AND h2 = @h2 AND QRG = @QRG AND Radius = @Radius AND F1_Clearance = @F1_Clearance AND StepWidth = @StepWidth)"; db.DBCommand.Parameters.Clear(); db.DBCommand.Parameters.Add(path.AsDouble("Lat1")); db.DBCommand.Parameters.Add(path.AsDouble("Lon1")); db.DBCommand.Parameters.Add(path.AsDouble("h1")); db.DBCommand.Parameters.Add(path.AsDouble("Lat2")); db.DBCommand.Parameters.Add(path.AsDouble("Lon2")); db.DBCommand.Parameters.Add(path.AsDouble("h2")); db.DBCommand.Parameters.Add(path.AsDouble("QRG")); db.DBCommand.Parameters.Add(path.AsDouble("Radius")); db.DBCommand.Parameters.Add(path.AsDouble("F1_Clearance")); db.DBCommand.Parameters.Add(path.AsDouble("StepWidth")); long result = (long)db.DBCommand.ExecuteScalar(); if (result > 0) { return(true); } } return(false); }
public PropagationPathDesignator PropagationPathFindOrCreateFromLatLon(BackgroundWorker caller, double lat1, double lon1, double h1, double lat2, double lon2, double h2, double qrg, double radius, double f1_clearance, double stepwidth, ELEVATIONMODEL model, double localobstruction, bool savetodatabase = true) { PropagationPathDesignator pp = this.PropagationPathFind(lat1, lon1, h1, lat2, lon2, h2, qrg, radius, f1_clearance, stepwidth, model, localobstruction); if (pp == null) { pp = this.PropagationPathCreateFromLatLon(caller, lat1, lon1, h1, lat2, lon2, h2, qrg, radius, f1_clearance, stepwidth, model, localobstruction, savetodatabase); } return(pp); }
public void PropagationPathInsertOrUpdateIfNewer(PropagationPathDesignator path, ELEVATIONMODEL model) { System.Data.SQLite.SQLiteDatabase db = GetPropagationDatabase(model); DateTime dt = this.PropagationPathFindLastUpdated(path, model); if (dt == DateTime.MinValue) { this.PropagationPathInsert(path, model); } else if (dt < path.LastUpdated) { this.PropagationPathUpdate(path, model); } }
public int PropagationPathDelete(PropagationPathDesignator path, ELEVATIONMODEL model) { System.Data.SQLite.SQLiteDatabase db = GetPropagationDatabase(model); lock (db.DBCommand) { db.DBCommand.CommandText = "DELETE FROM " + PropagationPathDesignator.TableName + " WHERE Lat1 = @Lat1 AND Lon1 = @Lon1 AND h1 = @h1 AND Lat2 = @Lat2 AND Lon2 = @Lon2 AND h2 = @h2 AND QRG = @QRG AND Radius = @Radius AND F1_Clearance = @F1_Clearance AND StepWidth = @StepWidth"; db.DBCommand.Parameters.Clear(); db.DBCommand.Parameters.Add(path.AsDouble("Lat1")); db.DBCommand.Parameters.Add(path.AsDouble("Lon1")); db.DBCommand.Parameters.Add(path.AsDouble("h1")); db.DBCommand.Parameters.Add(path.AsDouble("Lat2")); db.DBCommand.Parameters.Add(path.AsDouble("Lon2")); db.DBCommand.Parameters.Add(path.AsDouble("h2")); db.DBCommand.Parameters.Add(path.AsDouble("QRG")); db.DBCommand.Parameters.Add(path.AsDouble("Radius")); db.DBCommand.Parameters.Add(path.AsDouble("F1_Clearance")); db.DBCommand.Parameters.Add(path.AsDouble("StepWidth")); return(db.ExecuteNonQuery(db.DBCommand)); } }
public int PropagationPathUpdate(PropagationPathDesignator path, ELEVATIONMODEL model) { System.Data.SQLite.SQLiteDatabase db = GetPropagationDatabase(model); lock (db.DBCommand) { db.DBCommand.CommandText = "UPDATE " + PropagationPathDesignator.TableName + " SET Lat1 = @Lat1, Lon1 = @Lon1, h1 = @h1, Lat2 = @Lat2, Lon2 = @Lon2, h2 = @h2, QRG = @QRG, Radius = @Radius, F1_Clearance = @F1_Clearance, @StepWidth = @StepWidth, Eps1_Min = @Eps1_Min, Eps2_Min = @Eps2_Min, LastUpdated = @LastUpdated WHERE Lat1 = @Lat1 AND Lon1 = @Lon1 AND h1 = @h1 AND Lat2 = @Lat2 AND Lon2 = @Lon2 AND h2 = @h2 AND QRG = @QRG AND Radius = @Radius AND F1_Clearance = @F1_Clearance AND StepWidth = @StepWidth"; db.DBCommand.Parameters.Clear(); db.DBCommand.Parameters.Add(path.AsDouble("Lat1")); db.DBCommand.Parameters.Add(path.AsDouble("Lon1")); db.DBCommand.Parameters.Add(path.AsDouble("h1")); db.DBCommand.Parameters.Add(path.AsDouble("Lat2")); db.DBCommand.Parameters.Add(path.AsDouble("Lon2")); db.DBCommand.Parameters.Add(path.AsDouble("h2")); db.DBCommand.Parameters.Add(path.AsDouble("QRG")); db.DBCommand.Parameters.Add(path.AsDouble("Radius")); db.DBCommand.Parameters.Add(path.AsDouble("F1_Clearance")); db.DBCommand.Parameters.Add(path.AsDouble("StepWidth")); db.DBCommand.Parameters.Add(path.AsDouble("Eps1_Min")); db.DBCommand.Parameters.Add(path.AsDouble("Eps2_Min")); db.DBCommand.Parameters.Add(path.AsUNIXTime("LastUpdated")); return(db.ExecuteNonQuery(db.DBCommand)); } }
public int PropagationPathInsert(PropagationPathDesignator path, ELEVATIONMODEL model) { System.Data.SQLite.SQLiteDatabase db = GetPropagationDatabase(model); lock (db.DBCommand) { db.DBCommand.CommandText = "INSERT INTO " + PropagationPathDesignator.TableName + " (Lat1, Lon1, h1, Lat2, Lon2, h2, QRG, Radius, F1_Clearance, StepWidth, Eps1_Min, Eps2_Min, LastUpdated) VALUES (@Lat1, @Lon1, @h1, @Lat2, @Lon2, @h2, @QRG, @Radius, @F1_Clearance, @StepWidth, @Eps1_Min, @Eps2_Min, @LastUpdated)"; db.DBCommand.Parameters.Clear(); db.DBCommand.Parameters.Add(path.AsDouble("Lat1")); db.DBCommand.Parameters.Add(path.AsDouble("Lon1")); db.DBCommand.Parameters.Add(path.AsDouble("h1")); db.DBCommand.Parameters.Add(path.AsDouble("Lat2")); db.DBCommand.Parameters.Add(path.AsDouble("Lon2")); db.DBCommand.Parameters.Add(path.AsDouble("h2")); db.DBCommand.Parameters.Add(path.AsDouble("QRG")); db.DBCommand.Parameters.Add(path.AsDouble("Radius")); db.DBCommand.Parameters.Add(path.AsDouble("F1_Clearance")); db.DBCommand.Parameters.Add(path.AsDouble("StepWidth")); db.DBCommand.Parameters.Add(path.AsDouble("Eps1_Min")); db.DBCommand.Parameters.Add(path.AsDouble("Eps2_Min")); db.DBCommand.Parameters.Add(path.AsUNIXTime("LastUpdated")); return(db.ExecuteNonQuery(db.DBCommand)); } }
public PropagationPathDesignator PropagationPathCreateFromLatLon(BackgroundWorker caller, double lat1, double lon1, double h1, double lat2, double lon2, double h2, double qrg, double radius, double f1_clearance, double stepwidth, ELEVATIONMODEL model, double localobstruction, bool savetodatabase = true) { // calculates a propagation path, a elevation path is calculated before if needed // supports cancellation if calld from a background thread double eps1_min = double.MinValue; double eps2_min = double.MinValue; // find or create an elevation path ElevationPathDesignator ep = ElevationData.Database.ElevationPathFindOrCreateFromLatLon(caller, lat1, lon1, lat2, lon2, stepwidth, model, savetodatabase); // return null if elevation path is null for whatever reason if (ep == null) { return(null); } for (int i = 0; i < ep.Count; i++) { double dist1 = i * stepwidth / 1000.0; double dist2 = (ep.Count - i - 1) * stepwidth / 1000.0; double f1c1 = ScoutBase.Core.Propagation.F1Radius(qrg, dist1, dist2) * f1_clearance; double f1c2 = ScoutBase.Core.Propagation.F1Radius(qrg, dist2, dist1) * f1_clearance; double nf = NearFieldSuppression / 1000.0; double eps1; double eps2; if (dist1 > nf) { eps1 = ScoutBase.Core.Propagation.EpsilonFromHeights(h1, dist1, ep.Path[i] + f1c1, radius); } else { eps1 = ScoutBase.Core.Propagation.EpsilonFromHeights(h1, nf, ep.Path[i] + f1c1, radius); } if (eps1 > eps1_min) { eps1_min = eps1; } if (dist2 > nf) { eps2 = ScoutBase.Core.Propagation.EpsilonFromHeights(h2, dist2, ep.Path[i] + f1c2, radius); } else { eps2 = ScoutBase.Core.Propagation.EpsilonFromHeights(h2, nf, ep.Path[i] + f1c2, radius); } if (eps2 > eps2_min) { eps2_min = eps2; } if (caller != null) { // abort calculation if cancellation pending if (caller.WorkerSupportsCancellation && caller.CancellationPending) { return(null); } } } PropagationPathDesignator pp = new PropagationPathDesignator(lat1, lon1, h1, lat2, lon2, h2, qrg, radius, f1_clearance, stepwidth, eps1_min, eps2_min, localobstruction); // take status from elevation path pp.Valid = ep.Valid; // store in database if valid if ((pp != null) && pp.Valid && savetodatabase) { this.PropagationPathInsertOrUpdateIfNewer(pp, model); } return(pp); }
public DateTime PropagationPathFindLastUpdated(double lat1, double lon1, double h1, double lat2, double lon2, double h2, double qrg, double radius, double f1_clearance, double stepwidth, ELEVATIONMODEL model) { PropagationPathDesignator path = new PropagationPathDesignator(lat1, lon1, h1, lat2, lon2, h2, qrg, radius, f1_clearance, stepwidth, 0, 0, double.MinValue); return(this.PropagationPathFindLastUpdated(path, model)); }
public PropagationPathDesignator PropagationPathFind(double lat1, double lon1, double h1, double lat2, double lon2, double h2, double qrg, double radius, double f1_clearance, double stepwidth, ELEVATIONMODEL model, double localobstruction) { PropagationPathDesignator path = new PropagationPathDesignator(lat1, lon1, h1, lat2, lon2, h2, qrg, radius, f1_clearance, stepwidth, 0, 0, localobstruction); return(this.PropagationPathFind(path, model)); }