一个小算法

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;
            }

        }

posted @ 2010-11-04 14:57  MK_Sun  阅读(289)  评论(0编辑  收藏  举报