public void StableFlyAnalyse(Flight flight, List<FrameData> frameData)
{
try
{
List<FrameData> flas = new List<FrameData>();
FrameData fla = new FrameData();
FrameData fla1 = new FrameData();
FrameData fa1 = new FrameData();
FrameData fa2 = new FrameData();
FrameData fa3 = new FrameData();
FrameData fa4 = new FrameData();
TimeSpan ts = new TimeSpan();
int i1 = -1, i2 = frameData.Count;
Boolean IsStableFly = false;
double s = 0.0;
for (int i = 0; i < frameData.Count - 1; i++)
{
fa1 = frameData[i];
fa2 = frameData[i + 1];
FrameData fb = new FrameData();
if (i == 0)//第一个点保存
{
fb = frameData[0];
fb.Altitude = 0;
flas.Add(fb);
}
if (fa1.FlightPhase == 6 && fa2.FlightPhase == 6)
{
if ((int)Math.Round(fa1.Altitude / 100.0) * 100 == (int)Math.Round(fa2.Altitude / 100.0) * 100)
{
s += GetDistance(fa1.Longitude, fa1.Latitude, fa2.Longitude, fa2.Latitude);
if (i1 == -1)//第一个平行点
{
fla = new FrameData();
i1 = i;
if (fa3.Altitude == 0)
{
fa1.Distance = (int)GetDistance(frameData[0].Longitude, frameData[0].Latitude, fa1.Longitude, fa1.Latitude);
}
else
{
fa1.Distance = (int)GetDistance(fa3.Longitude, fa3.Latitude, fa1.Longitude, fa1.Latitude);
}
fa1.Distances = fa1.Distance + fa3.Distances;
fa1.Altitude = (int)Math.Round(fa1.Altitude / 100.0) * 100;
fla = fa1;
fa4 = fa1;
IsStableFly = true;
}
}
else if ((int)Math.Round(fa1.Altitude / 100.0) * 100 == fla.Altitude && (int)Math.Round(fa2.Altitude / 100.0) * 100 != fla.Altitude)
{
if (IsStableFly)
{
i2 = i;
ts = frameData[i2].RecordTime - frameData[i1].RecordTime;
if (ts.Days * 24 * 3600 + ts.Hours * 3600 + ts.Minutes * 60 + ts.Seconds >= 180)
{
//符合同一高度飞超过3分钟
fla1 = new FrameData();
flas.Add(fla);
fa1.Distance = (int)s;
fa1.Distances = fa4.Distances + fa1.Distance;
fa1.Altitude = (int)Math.Round(fa1.Altitude / 100.0) * 100;
fla1 = fa1;
fa3 = fa1;
flas.Add(fla1);
}
i1 = -1;//重新选第一个平行点
IsStableFly = false;
s = 0.0;
}
}
}
else if (fa1.FlightPhase == 6 && fa2.FlightPhase != 6)
{
//飞行阶段为6的点高度都一样 ,此时飞行阶段变换
if ((int)Math.Round(fa1.Altitude / 100.0) * 100 == fla.Altitude)
{
if (IsStableFly)
{
i2 = i;
ts = frameData[i2].RecordTime - frameData[i1].RecordTime;
if (ts.Days * 24 * 3600 + ts.Hours * 3600 + ts.Minutes * 60 + ts.Seconds >= 180)
{
fla1 = new FrameData();
flas.Add(fla);
fa1.Distance = (int)s;
fa1.Altitude = (int)Math.Round(fa1.Altitude / 100.0) * 100;
fa1.Distances = fa4.Distances + fa1.Distance;
fla1 = fa1;
fa3 = fa1;
flas.Add(fla1);
}
i1 = -1;//重新选第一个平行点
IsStableFly = false;
s = 0.0;
}
}
}
if (i == frameData.Count - 2)
{
FrameData fc = new FrameData();
fc = frameData[i + 1];
fc.Altitude = 0;
fc.Altitude = (int)Math.Round(fc.Altitude / 100.0) * 100;
fc.Distance = (int)GetDistance(fa3.Longitude, fa3.Latitude, fc.Longitude, fc.Latitude);
fc.Distances = fa3.Distances + fc.Distance;
flas.Add(fc);
}
}
for (int j = 0; j < flas.Count; j++)
{
flas[j].Idx = j + 1;
}
string msg = "";
new QarDa().InsertQ3004Data(flight, flas, out msg);
}
catch (Exception ex)
{
throw ex;
}
}