private static void UpdateGlobalList()
{
foreach (TargetType CurrentTarget in CurrentTargetList)
{
CurrentTarget.TrackTerminateTreshold = 0;
if (CurrentTarget.TrackNumber != -1)
{
GlobalTargetList[CurrentTarget.TrackNumber].ModeA = CurrentTarget.ModeA;
GlobalTargetList[CurrentTarget.TrackNumber].ModeC_Previous_Cycle = "";
if (GlobalTargetList[CurrentTarget.TrackNumber].ModeC != null)
GlobalTargetList[CurrentTarget.TrackNumber].ModeC_Previous_Cycle = "" + GlobalTargetList[CurrentTarget.TrackNumber].ModeC;
GlobalTargetList[CurrentTarget.TrackNumber].ModeC = CurrentTarget.ModeC;
GlobalTargetList[CurrentTarget.TrackNumber].CALC_GSPD = CurrentTarget.CALC_GSPD;
if (CurrentTarget.DAP_GSPD != "N/A")
GlobalTargetList[CurrentTarget.TrackNumber].DAP_GSPD = CurrentTarget.DAP_GSPD;
GlobalTargetList[CurrentTarget.TrackNumber].ACID_Mode_S = CurrentTarget.ACID_Mode_S;
if (CurrentTarget.Mode_S_Addr != "N/A")
GlobalTargetList[CurrentTarget.TrackNumber].Mode_S_Addr = CurrentTarget.Mode_S_Addr;
if (CurrentTarget.DAP_HDG != "N/A")
GlobalTargetList[CurrentTarget.TrackNumber].DAP_HDG = CurrentTarget.DAP_HDG;
GlobalTargetList[CurrentTarget.TrackNumber].CALC_HDG = CurrentTarget.CALC_HDG;
if (CurrentTarget.IAS != "N/A")
GlobalTargetList[CurrentTarget.TrackNumber].IAS = CurrentTarget.IAS;
if (CurrentTarget.TRK != "N/A")
GlobalTargetList[CurrentTarget.TrackNumber].TRK = CurrentTarget.TRK;
if (CurrentTarget.MACH != "N/A")
GlobalTargetList[CurrentTarget.TrackNumber].MACH = CurrentTarget.MACH;
if (CurrentTarget.TAS != "N/A")
GlobalTargetList[CurrentTarget.TrackNumber].TAS = CurrentTarget.TAS;
if (CurrentTarget.Roll_Ang != "N/A")
GlobalTargetList[CurrentTarget.TrackNumber].Roll_Ang = CurrentTarget.Roll_Ang;
if (CurrentTarget.SelectedAltitude_ShortTerm != "N/A")
GlobalTargetList[CurrentTarget.TrackNumber].SelectedAltitude_ShortTerm = CurrentTarget.SelectedAltitude_ShortTerm;
if (CurrentTarget.SelectedAltitude_LongTerm != "N/A")
GlobalTargetList[CurrentTarget.TrackNumber].SelectedAltitude_LongTerm = CurrentTarget.SelectedAltitude_LongTerm;
if (CurrentTarget.Rate_Of_Climb != "N/A")
GlobalTargetList[CurrentTarget.TrackNumber].Rate_Of_Climb = CurrentTarget.Rate_Of_Climb;
if (CurrentTarget.Barometric_Setting != "N/A")
GlobalTargetList[CurrentTarget.TrackNumber].Barometric_Setting = CurrentTarget.Barometric_Setting;
GlobalTargetList[CurrentTarget.TrackNumber].Lat = CurrentTarget.Lat;
GlobalTargetList[CurrentTarget.TrackNumber].Lon = CurrentTarget.Lon;
GlobalTargetList[CurrentTarget.TrackNumber].TimeSinceMidnight = CurrentTarget.TimeSinceMidnight;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Handle history points
if (GlobalTargetList[CurrentTarget.TrackNumber].MyMarker.HistoryPoints.Count > 0)
{
// select a reference elllipsoid
Ellipsoid reference = Ellipsoid.WGS84;
// instantiate the calculator
GeodeticCalculator geoCalc = new GeodeticCalculator();
GlobalPosition Track_1 = new GlobalPosition(new GlobalCoordinates(CurrentTarget.Lat, CurrentTarget.Lon));
GlobalPosition Track_2 = new GlobalPosition(new GlobalCoordinates(GlobalTargetList[CurrentTarget.TrackNumber].MyMarker.HistoryPoints.Last().LatLong.Lat,
GlobalTargetList[CurrentTarget.TrackNumber].MyMarker.HistoryPoints.Last().LatLong.Lng));
// Calculate distance traveled
double DistanceTraveled = geoCalc.CalculateGeodeticMeasurement(reference, Track_1, Track_2).PointToPointDistance;
DistanceTraveled = DistanceTraveled * 0.00053996; // Convert to nautical miles
double BetweenTwoUpdates = CurrentTarget.TimeSinceMidnight - GlobalTargetList[CurrentTarget.TrackNumber].MyMarker.HistoryPoints.Last().TimeSinceMidnight;
int Miliseconds = (int)(((BetweenTwoUpdates - Math.Floor(BetweenTwoUpdates)) * 10.0));
TimeSpan TimeDifference = new TimeSpan(0, 0, 0, (int)Math.Floor(BetweenTwoUpdates), Miliseconds);
// Only update history position if there was actually a change in the distance
if (DistanceTraveled > 0)
{
if (GlobalTargetList[CurrentTarget.TrackNumber].MyMarker.HistoryPoints.Count > Max_History_Points)
GlobalTargetList[CurrentTarget.TrackNumber].MyMarker.HistoryPoints.Dequeue();
GMapTargetandLabel.HistoryPointsType HP = new GMapTargetandLabel.HistoryPointsType();
HP.LatLong = new PointLatLng(CurrentTarget.Lat, CurrentTarget.Lon);
HP.TimeSinceMidnight = CurrentTarget.TimeSinceMidnight;
GlobalTargetList[CurrentTarget.TrackNumber].MyMarker.HistoryPoints.Enqueue(HP);
}
}
else
{
GMapTargetandLabel.HistoryPointsType HP = new GMapTargetandLabel.HistoryPointsType();
HP.LatLong = new PointLatLng(CurrentTarget.Lat, CurrentTarget.Lon);
HP.TimeSinceMidnight = CurrentTarget.TimeSinceMidnight;
GlobalTargetList[CurrentTarget.TrackNumber].MyMarker.HistoryPoints.Enqueue(HP);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
GlobalTargetList[CurrentTarget.TrackNumber].TrackNumber = CurrentTarget.TrackNumber;
GlobalTargetList[CurrentTarget.TrackNumber].TrackTerminateTreshold = CurrentTarget.TrackTerminateTreshold;
}
else
{
int ModeAIndex = int.Parse(CurrentTarget.ModeA.ToString());
GlobalTargetList[ModeAIndex].ModeA = CurrentTarget.ModeA;
GlobalTargetList[ModeAIndex].ModeC_Previous_Cycle = "";
if (GlobalTargetList[ModeAIndex].ModeC != null)
GlobalTargetList[ModeAIndex].ModeC_Previous_Cycle = "" + GlobalTargetList[ModeAIndex].ModeC;
GlobalTargetList[ModeAIndex].ModeC = CurrentTarget.ModeC;
if (CurrentTarget.DAP_GSPD != "N/A")
GlobalTargetList[ModeAIndex].DAP_GSPD = CurrentTarget.DAP_GSPD;
GlobalTargetList[ModeAIndex].CALC_GSPD = CurrentTarget.CALC_GSPD;
GlobalTargetList[ModeAIndex].ACID_Mode_S = CurrentTarget.ACID_Mode_S;
if (CurrentTarget.Mode_S_Addr != "N/A")
GlobalTargetList[ModeAIndex].Mode_S_Addr = CurrentTarget.Mode_S_Addr;
if (CurrentTarget.DAP_HDG != "N/A")
GlobalTargetList[ModeAIndex].DAP_HDG = CurrentTarget.DAP_HDG;
GlobalTargetList[ModeAIndex].CALC_HDG = CurrentTarget.CALC_HDG;
if (CurrentTarget.IAS != "N/A")
GlobalTargetList[ModeAIndex].IAS = CurrentTarget.IAS;
if (CurrentTarget.TRK != "N/A")
GlobalTargetList[ModeAIndex].TRK = CurrentTarget.TRK;
if (CurrentTarget.MACH != "N/A")
GlobalTargetList[ModeAIndex].MACH = CurrentTarget.MACH;
if (CurrentTarget.TAS != "N/A")
GlobalTargetList[ModeAIndex].TAS = CurrentTarget.TAS;
if (CurrentTarget.Roll_Ang != "N/A")
GlobalTargetList[ModeAIndex].Roll_Ang = CurrentTarget.Roll_Ang;
if (CurrentTarget.SelectedAltitude_ShortTerm != "N/A")
GlobalTargetList[ModeAIndex].SelectedAltitude_ShortTerm = CurrentTarget.SelectedAltitude_ShortTerm;
if (CurrentTarget.SelectedAltitude_LongTerm != "N/A")
GlobalTargetList[ModeAIndex].SelectedAltitude_LongTerm = CurrentTarget.SelectedAltitude_LongTerm;
if (CurrentTarget.Rate_Of_Climb != "N/A")
GlobalTargetList[ModeAIndex].Rate_Of_Climb = CurrentTarget.Rate_Of_Climb;
if (CurrentTarget.Barometric_Setting != "N/A")
GlobalTargetList[ModeAIndex].Barometric_Setting = CurrentTarget.Barometric_Setting;
GlobalTargetList[ModeAIndex].Lat = CurrentTarget.Lat;
GlobalTargetList[ModeAIndex].Lon = CurrentTarget.Lon;
GlobalTargetList[ModeAIndex].TimeSinceMidnight = CurrentTarget.TimeSinceMidnight;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Handle history points
if (GlobalTargetList[ModeAIndex].MyMarker.HistoryPoints.Count > 0)
{
// select a reference elllipsoid
Ellipsoid reference = Ellipsoid.WGS84;
// instantiate the calculator
GeodeticCalculator geoCalc = new GeodeticCalculator();
GlobalPosition Track_1 = new GlobalPosition(new GlobalCoordinates(CurrentTarget.Lat, CurrentTarget.Lon));
GlobalPosition Track_2 = new GlobalPosition(new GlobalCoordinates(GlobalTargetList[ModeAIndex].MyMarker.HistoryPoints.Last().LatLong.Lat,
GlobalTargetList[ModeAIndex].MyMarker.HistoryPoints.Last().LatLong.Lng));
// Calculate distance traveled
double DistanceTraveled = geoCalc.CalculateGeodeticMeasurement(reference, Track_1, Track_2).PointToPointDistance;
DistanceTraveled = DistanceTraveled * 0.00053996; // Convert to nautical miles
double BetweenTwoUpdates = CurrentTarget.TimeSinceMidnight - GlobalTargetList[ModeAIndex].MyMarker.HistoryPoints.Last().TimeSinceMidnight;
int Miliseconds = (int)(((BetweenTwoUpdates - Math.Floor(BetweenTwoUpdates)) * 10.0));
TimeSpan TimeDifference = new TimeSpan(0, 0, 0, (int)Math.Floor(BetweenTwoUpdates), Miliseconds);
// Only update history position if there was actually a change in the distance
if (DistanceTraveled > 0)
{
if (GlobalTargetList[ModeAIndex].MyMarker.HistoryPoints.Count > Max_History_Points)
GlobalTargetList[ModeAIndex].MyMarker.HistoryPoints.Dequeue();
GMapTargetandLabel.HistoryPointsType HP = new GMapTargetandLabel.HistoryPointsType();
HP.LatLong = new PointLatLng(CurrentTarget.Lat, CurrentTarget.Lon);
HP.TimeSinceMidnight = CurrentTarget.TimeSinceMidnight;
GlobalTargetList[ModeAIndex].MyMarker.HistoryPoints.Enqueue(HP);
}
}
else
{
GMapTargetandLabel.HistoryPointsType HP = new GMapTargetandLabel.HistoryPointsType();
HP.LatLong = new PointLatLng(CurrentTarget.Lat, CurrentTarget.Lon);
HP.TimeSinceMidnight = CurrentTarget.TimeSinceMidnight;
GlobalTargetList[ModeAIndex].MyMarker.HistoryPoints.Enqueue(HP);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
GlobalTargetList[ModeAIndex].TrackNumber = ModeAIndex;
GlobalTargetList[ModeAIndex].TrackTerminateTreshold = CurrentTarget.TrackTerminateTreshold;
}
}
CurrentTargetList.Clear();
foreach (TargetType GlobalTarget in GlobalTargetList)
{
if (GlobalTarget.TrackTerminateTreshold < Properties.Settings.Default.TrackCoast)
{
TargetType NewTarget = new TargetType();
GlobalTarget.TrackTerminateTreshold++;
NewTarget.ModeA = GlobalTarget.ModeA;
NewTarget.ModeC_Previous_Cycle = GlobalTarget.ModeC_Previous_Cycle;
NewTarget.ModeC = GlobalTarget.ModeC;
NewTarget.CALC_GSPD = GlobalTarget.CALC_GSPD;
NewTarget.DAP_GSPD = GlobalTarget.DAP_GSPD;
NewTarget.ACID_Mode_S = GlobalTarget.ACID_Mode_S;
NewTarget.Mode_S_Addr = GlobalTarget.Mode_S_Addr;
NewTarget.TRK = GlobalTarget.TRK;
NewTarget.TAS = GlobalTarget.TAS;
NewTarget.Roll_Ang = GlobalTarget.Roll_Ang;
NewTarget.SelectedAltitude_ShortTerm = GlobalTarget.SelectedAltitude_ShortTerm;
NewTarget.SelectedAltitude_LongTerm = GlobalTarget.SelectedAltitude_LongTerm;
NewTarget.Rate_Of_Climb = GlobalTarget.Rate_Of_Climb;
NewTarget.MACH = GlobalTarget.MACH;
NewTarget.DAP_HDG = GlobalTarget.DAP_HDG;
NewTarget.CALC_HDG = GlobalTarget.CALC_HDG;
NewTarget.IAS = GlobalTarget.IAS;
NewTarget.Barometric_Setting = GlobalTarget.Barometric_Setting;
NewTarget.Lat = GlobalTarget.Lat;
NewTarget.Lon = GlobalTarget.Lon;
NewTarget.TimeSinceMidnight = GlobalTarget.TimeSinceMidnight;
NewTarget.TrackNumber = GlobalTarget.TrackNumber;
NewTarget.TrackTerminateTreshold = GlobalTarget.TrackTerminateTreshold;
NewTarget.MyMarker = GlobalTarget.MyMarker;
CurrentTargetList.Add(NewTarget);
}
else
{
if (GlobalTarget.MyMarker != null)
GlobalTarget.MyMarker.TerminateTarget();
}
}
if (Properties.Settings.Default.DisplayPSR == true)
{
// Now append all the PSR tracks to the end of the display list
foreach (TargetType PSRTgtList in PSRTargetList)
{
TargetType NewTarget = new TargetType();
NewTarget.ModeC_Previous_Cycle = PSRTgtList.ModeC_Previous_Cycle;
NewTarget.Lat = PSRTgtList.Lat;
NewTarget.Lon = PSRTgtList.Lon;
NewTarget.TrackNumber = PSRTgtList.TrackNumber;
NewTarget.TrackTerminateTreshold = 0;
NewTarget.MyMarker = PSRTgtList.MyMarker;
CurrentTargetList.Add(NewTarget);
}
}
}