Пример #1
0
        private void check(Cat021Data data)
        {
            String distance = ConfigHelper.Instance.GetConfig("alarm_distance");

            if (!string.IsNullOrWhiteSpace(distance))
            {
                double            alarm_distance = Convert.ToDouble(distance);
                List <Cat021Data> t2             = new List <Cat021Data>(airplaneList.ToArray()); // copy of airplaneList

                SoundPlayer player = new SoundPlayer();
                player.SoundLocation = Environment.CurrentDirectory + "\\UIDesign\\监控模式pc\\assets\\alarm.wav";
                player.Load(); //同步加载声音


                // 在这里做告警,最新的更新机器跟其他飞机是否低于阈值
                foreach (Cat021Data item in t2)
                {
                    double myDistance = CommonHelper.Distance(item.latitude, item.longtitude, data.latitude, data.longtitude);
                    if (myDistance > 0.01 && alarm_distance >= myDistance)
                    {
                        String info = "距离报警!" + item.sModeAddress.ToString() + "跟中心机距离:" + data.sModeAddress.ToString();
                        ProfileHelper.Instance.Update("INSERT INTO Alarm (" +
                                                      "FlightNo, SModeAddress, SModeAddressTo, Info, WriteTime, Status) VALUES ('" +
                                                      data.flightNo.ToString().Trim() + "', '" +
                                                      data.sModeAddress + "', '" +
                                                      item.sModeAddress + "', '" +
                                                      info + "', '" + DateTime.Now.ToString() + "', 0)");

                        addAlermList(data.sModeAddress);
                        addAlermList(item.sModeAddress);

                        if ("YES".Equals(ConfigHelper.Instance.GetConfig("alarm_type1")))
                        {
                            System.Windows.Forms.MessageBox.Show(info);
                        }
                        if ("YES".Equals(ConfigHelper.Instance.GetConfig("alarm_type2")))
                        {
                            System.Media.SystemSounds.Exclamation.Play();
                            player.Play(); //启用新线程播放
                        }
                    }
                    else
                    {
                        ProfileHelper.Instance.Update("Update Alarm Set Status = 1 WHERE SModeAddress = '" +
                                                      data.sModeAddress + "' AND SModeAddressTo = '" + item.sModeAddress + "'");

                        subAlermList(data.sModeAddress);
                        subAlermList(item.sModeAddress);
                    }
                }
            }
        }
Пример #2
0
 private void initCenterPlane(Cat021Data tmpData)
 {
     ConfigHelper.Instance.SetConfig("my_flightNo", tmpData.flightNo.ToString().Trim());
     ConfigHelper.Instance.SetConfig("my_latitude", tmpData.latitude.ToString());
     ConfigHelper.Instance.SetConfig("my_longtitude", tmpData.longtitude.ToString());
     ConfigHelper.Instance.SetConfig("my_elapsedTime", tmpData.elapsedTime.ToString());
     ConfigHelper.Instance.SetConfig("my_geometricAltitude", tmpData.geometricAltitude.ToString());
     ConfigHelper.Instance.SetConfig("my_barometricAltitude", tmpData.barometricAltitude.ToString());
     ConfigHelper.Instance.SetConfig("my_airSpeed", tmpData.airSpeed.ToString());
     ConfigHelper.Instance.SetConfig("my_airSpeedUnit", tmpData.airSpeedUnit.ToString());
     ConfigHelper.Instance.SetConfig("my_aircraftAngle", tmpData.aircraftAngle.ToString());
     ConfigHelper.Instance.SetConfig("my_groundSpeed", tmpData.groundSpeed.ToString());
     ConfigHelper.Instance.SetConfig("my_emitterCategory", tmpData.emitterCategory.ToString());
 }
Пример #3
0
 public Cat021Data GetData()
 {
     try
     {
         Cat021Data result = qData.Dequeue();
         Save(result);
         return(result);
     }
     catch
     {
         Cat021Data reData = new Cat021Data();
         reData.flightNo = "CA0000";
         return(reData);
     }
 }
Пример #4
0
 public bool Add(Cat021Data data)
 {
     foreach (Cat021Data item in airplaneList)
     {
         if (data.sModeAddress == item.sModeAddress)
         {
             airplaneList.Remove(item);
             airplaneList.Add(data);
             check(data);
             return(false);
         }
     }
     airplaneList.Add(data);
     check(data);
     return(true);
 }
Пример #5
0
 private static void ReceiveMsg()
 {
     while (isOn)
     {
         // 用来保存发送方的ip和端口号
         EndPoint point  = new IPEndPoint(IPAddress.Any, 0);
         byte[]   buffer = new byte[1024];
         // 接收数据报
         try
         {
             int        length  = socket.ReceiveFrom(buffer, ref point);
             Cat021Data outData = CommWrapper.decode(buffer, UDPDataSource.type);
             qData.Enqueue(outData);
         }
         catch (Exception)
         {
             return;
         }
     }
 }
Пример #6
0
 public static Cat021Data decode(Byte[] msg, Byte type)
 {
     if (null == msg || 0 == msg.Length)
     {
         Cat021Data exceptionData = new Cat021Data();
         exceptionData.sModeAddress = -1;
         exceptionData.flightNo     = "CA0000";
         return(exceptionData);
     }
     try
     {
         msg[1023] = type;
         // Console.WriteLine("msg1 = " + msg[0] + ", " + msg[1] + ", " + msg[2]);
         var p = Marshal.AllocHGlobal(1024);
         Marshal.Copy(msg, 0, p, 1024);
         IntPtr ptr = CommWrapper.decodeMessage4(p);
         Marshal.FreeHGlobal(p);
         msg[1023] = 0;
         // Console.WriteLine("msg2 = " + msg[0] + ", " + msg[1] + ", " + msg[2]);
         Cat021Data outData = (Cat021Data)Marshal.PtrToStructure(ptr, typeof(Cat021Data));
         if (-1 == outData.sModeAddress)
         {
             Cat021Data exceptionData = new Cat021Data();
             exceptionData.sModeAddress = -1;
             exceptionData.flightNo     = "CA0000";
             return(exceptionData);
         }
         // Marshal.FreeHGlobal(ptr);
         return(outData);
     }
     catch
     {
         Cat021Data exceptionData = new Cat021Data();
         exceptionData.sModeAddress = -1;
         exceptionData.flightNo     = "CA0000";
         return(exceptionData);
     }
 }
Пример #7
0
        public GMapAirPlane(PointLatLng p, Cat021Data data, int selected) : base(p)
        {
            // 中心机 监控模式下作废了
            if (1 == selected)
            {
                Image = Bitmap.FromFile(Environment.CurrentDirectory + "\\UIDesign\\监控模式pc\\assets\\飞机 copy [email protected]") as Bitmap;
            }
            // 关注机
            else if (2 == selected)
            {
                Image = Bitmap.FromFile(Environment.CurrentDirectory + "\\UIDesign\\监控模式pc\\assets\\飞机 copy [email protected]") as Bitmap;
            }
            // 告警机
            else if (3 == selected)
            {
                Image = Bitmap.FromFile(Environment.CurrentDirectory + "\\UIDesign\\监控模式pc\\assets\\飞机 告警@2x.png") as Bitmap;
            }
            // 正常机
            else
            {
                Image = Bitmap.FromFile(Environment.CurrentDirectory + "\\UIDesign\\监控模式pc\\assets\\飞机 copy 4.png") as Bitmap;
            }

            Offset = new System.Drawing.Point(-Size.Width / 2, -Size.Height / 2);
            Pen    = new Pen(Brushes.Red, 2);

            airplaneInfo = data;

            //ToolTipMode = MarkerTooltipMode.OnMouseOver;
            //ToolTipText = "S模式地址:" + data.sModeAddress.ToString() + "\r\n"
            //           // + "SSR: " + "0" + "\r\n"
            //            + "FID: " + data.flightNo.ToString() + "\r\n"
            //            + "经度: " + p.Lat.ToString() + "\r\n"
            //            + "纬度: " + p.Lng.ToString() + "\r\n"
            //            + "高度:" + data.geometricAltitude.ToString() + "\r\n";

            //ToolTip.Fill = new SolidBrush(Color.FromArgb(0, 0, 0, 0));
        }
Пример #8
0
 public Cat021Data GetData()
 {
     using (SQLiteCommand cmd = connection.CreateCommand())
     {
         cmd.CommandText = "SELECT * FROM Data WHERE ID > @ID";
         if (Form_playback.sModeAddressList.Count > 0)
         {
             String sModeAddressString = null;
             foreach (string sModeAddress in Form_playback.sModeAddressList)
             {
                 if (null == sModeAddressString)
                 {
                     sModeAddressString = "'" + sModeAddress + "'";
                 }
                 else
                 {
                     sModeAddressString += ", '" + sModeAddress + "'";
                 }
             }
             cmd.CommandText = cmd.CommandText + " AND sModeAddress IN (" + sModeAddressString + ")";
         }
         if (null != Form_playback.startTime)
         {
             cmd.CommandText = cmd.CommandText + " AND createTime > " + Form_playback.startTime.Ticks;
         }
         if (null != Form_playback.endTime)
         {
             cmd.CommandText = cmd.CommandText + " AND createTime < " + Form_playback.endTime.Ticks;
         }
         cmd.CommandText = cmd.CommandText + " ORDER BY ID ASC LIMIT 1";
         SQLiteParameter parameter = new SQLiteParameter();
         parameter.DbType        = DbType.String;
         parameter.ParameterName = "ID";
         parameter.Value         = Id;
         cmd.Parameters.Add(parameter);
         DataSet           dataSet = new DataSet();
         SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd);
         adapter.Fill(dataSet);
         if (0 == dataSet.Tables[0].Rows.Count)
         {
             Cat021Data exceptionData = new Cat021Data();
             exceptionData.flightNo = "CA0000";
             return(exceptionData);
         }
         else
         {
             this.Id = (int)(long)dataSet.Tables[0].Rows[0]["ID"];
             Cat021Data data = new Cat021Data();
             data.sModeAddress       = (int)(long)dataSet.Tables[0].Rows[0]["sModeAddress"];
             data.flightNo           = (string)dataSet.Tables[0].Rows[0]["flightNo"];
             data.latitude           = (double)dataSet.Tables[0].Rows[0]["latitude"];
             data.longtitude         = (double)dataSet.Tables[0].Rows[0]["longtitude"];
             data.elapsedTime        = (double)dataSet.Tables[0].Rows[0]["elapsedTime"];
             data.geometricAltitude  = (double)dataSet.Tables[0].Rows[0]["geometricAltitude"];
             data.barometricAltitude = (double)dataSet.Tables[0].Rows[0]["barometricAltitude"];
             data.airSpeed           = (double)dataSet.Tables[0].Rows[0]["airSpeed"];
             data.airSpeedUnit       = (byte)(long)dataSet.Tables[0].Rows[0]["airSpeedUnit"];
             data.aircraftAngle      = (double)dataSet.Tables[0].Rows[0]["aircraftAngle"];
             data.groundSpeed        = (double)dataSet.Tables[0].Rows[0]["groundSpeed"];
             data.emitterCategory    = (byte)(long)dataSet.Tables[0].Rows[0]["emitterCategory"];
             return(data);
         }
     }
 }
Пример #9
0
 private void Save(Cat021Data data)
 {
     using (SQLiteCommand cmd = connection.CreateCommand())
     {
         cmd.CommandText = "INSERT INTO Data (sModeAddress, flightNo, latitude, longtitude, elapsedTime, geometricAltitude, barometricAltitude, airSpeed, airSpeedUnit, aircraftAngle, groundSpeed, emitterCategory, createTime) VALUES(@sModeAddress, @flightNo, @latitude, @longtitude, @elapsedTime, @geometricAltitude, @barometricAltitude, @airSpeed, @airSpeedUnit, @aircraftAngle, @groundSpeed, @emitterCategory, @createTime)";
         SQLiteParameter parameter = new SQLiteParameter();
         parameter.DbType        = System.Data.DbType.Int32;
         parameter.ParameterName = "sModeAddress";
         parameter.Value         = data.sModeAddress;
         cmd.Parameters.Add(parameter);
         //
         parameter               = new SQLiteParameter();
         parameter.DbType        = System.Data.DbType.String;
         parameter.ParameterName = "flightNo";
         parameter.Value         = data.flightNo;
         cmd.Parameters.Add(parameter);
         //
         parameter               = new SQLiteParameter();
         parameter.DbType        = System.Data.DbType.Double;
         parameter.ParameterName = "latitude";
         parameter.Value         = data.latitude;
         cmd.Parameters.Add(parameter);
         //
         parameter               = new SQLiteParameter();
         parameter.DbType        = System.Data.DbType.Double;
         parameter.ParameterName = "longtitude";
         parameter.Value         = data.longtitude;
         cmd.Parameters.Add(parameter);
         //
         parameter               = new SQLiteParameter();
         parameter.DbType        = System.Data.DbType.Double;
         parameter.ParameterName = "elapsedTime";
         parameter.Value         = data.elapsedTime;
         cmd.Parameters.Add(parameter);
         //
         parameter               = new SQLiteParameter();
         parameter.DbType        = System.Data.DbType.Double;
         parameter.ParameterName = "geometricAltitude";
         parameter.Value         = data.geometricAltitude;
         cmd.Parameters.Add(parameter);
         //
         parameter               = new SQLiteParameter();
         parameter.DbType        = System.Data.DbType.Double;
         parameter.ParameterName = "barometricAltitude";
         parameter.Value         = data.barometricAltitude;
         cmd.Parameters.Add(parameter);
         //
         parameter               = new SQLiteParameter();
         parameter.DbType        = System.Data.DbType.Double;
         parameter.ParameterName = "airSpeed";
         parameter.Value         = data.airSpeed;
         cmd.Parameters.Add(parameter);
         //
         parameter               = new SQLiteParameter();
         parameter.DbType        = System.Data.DbType.Byte;
         parameter.ParameterName = "airSpeedUnit";
         parameter.Value         = data.airSpeedUnit;
         cmd.Parameters.Add(parameter);
         //
         parameter               = new SQLiteParameter();
         parameter.DbType        = System.Data.DbType.Double;
         parameter.ParameterName = "aircraftAngle";
         parameter.Value         = data.aircraftAngle;
         cmd.Parameters.Add(parameter);
         //
         parameter               = new SQLiteParameter();
         parameter.DbType        = System.Data.DbType.Double;
         parameter.ParameterName = "groundSpeed";
         parameter.Value         = data.groundSpeed;
         cmd.Parameters.Add(parameter);
         //
         parameter               = new SQLiteParameter();
         parameter.DbType        = System.Data.DbType.Byte;
         parameter.ParameterName = "emitterCategory";
         parameter.Value         = data.emitterCategory;
         cmd.Parameters.Add(parameter);
         //
         parameter               = new SQLiteParameter();
         parameter.DbType        = System.Data.DbType.Int64;
         parameter.ParameterName = "createTime";
         parameter.Value         = DateTime.Now.Ticks;
         cmd.Parameters.Add(parameter);
         //
         cmd.ExecuteNonQuery();
     }
 }
Пример #10
0
        private void showOnePlane(GMapAirPlane eachlistAirplane)
        {
            if (!airPlaneShow)
            {
                return;
            }

            // 没有航迹圈控制,直接显示
            if (!flightCircle)
            {
                showPorintInMap(eachlistAirplane);
                return;
            }

            // 只展示航迹圈内的飞机
            if (currentFellowId <= 0)
            {
                return;
            }

            List <Dictionary <string, object> > result =
                ProfileHelper.Instance.Select("SELECT * FROM PlaneFollow WHERE ID = " + currentFellowId);

            // 没查到勾选记录
            if (null == result || result.Count() == 0)
            {
                return;
            }

            Dictionary <string, object> dictionary = result[0];
            int type = Convert.ToInt32(dictionary["Type"]);
            // 展示半径
            double length = Convert.ToDouble(dictionary["Length"]);

            // 查到的显示半径为0
            if (length <= 0)
            {
                return;
            }

            double lat  = 0.0;
            double lang = 0.0;

            // 飞行器
            if (1 == type)
            {
                // 根据S地址查找最新的地址
                List <Cat021Data> list = AirplaneManager.Instance.Query(Convert.ToInt32(dictionary["IDNum"]), null, 0, 0, 0, 0);
                if (list.Count() > 0)
                {
                    Cat021Data data = list[0];
                    lat  = data.latitude;
                    lang = data.longtitude;
                }
                else
                {
                    return;
                }
            }
            else
            {
                // 根据id查出地面站信息
                List <Dictionary <string, object> > stationList = ProfileHelper.Instance.Select(
                    "SELECT * FROM LandStation WHERE ID = " + dictionary["IDNum"]);
                if (stationList.Count() > 0)
                {
                    Dictionary <string, object> station = stationList[0];
                    lat  = Convert.ToDouble(station["Lat"]);
                    lang = Convert.ToDouble(station["Lng"]);
                }
                else
                {
                    return;
                }
            }

            showFlightCircle(lat, lang, (int)length);

            // 只展示圈内的飞机
            double disPlane = CommonHelper.Distance(
                lat,
                lang,
                eachlistAirplane.AirPlaneMarkerInfo.latitude,
                eachlistAirplane.AirPlaneMarkerInfo.longtitude);

            if (disPlane <= length)
            {
                showPorintInMap(eachlistAirplane);
            }
        }
Пример #11
0
        // 区别飞行器是正常机、凸显机还是中心机;记录轨迹点
        private void flyTimer_Tick(object sender, EventArgs e)
        {
            if (dataSource.Count == 0)
            {
                return;
            }
            Cat021Data tmpData        = dataSource.GetData();
            int        isCheckedPlane = 0; // 0-普通飞行器,1-凸显飞行器,2-中心机,3-告警机器

            // 获取中心机
            String my_sAddress = ConfigHelper.Instance.GetConfig("my_sAddress");
            int    iAddress    = Convert.ToInt32(my_sAddress);

            if (!string.IsNullOrWhiteSpace(my_sAddress) && tmpData.sModeAddress == iAddress)
            {
                isCheckedPlane = 1;
                initCenterPlane(tmpData);
            }

            PointLatLng pointLatLng = new PointLatLng(tmpData.latitude, tmpData.longtitude);

            // 看飞机是否在凸显列表中
            if (1 != isCheckedPlane)
            {
                if (listAirplaneCheck.ContainsKey(tmpData.sModeAddress))
                {
                    isCheckedPlane = 2;

                    if (pointPlaneLand.ContainsKey(tmpData.sModeAddress))
                    {
                        pointPlaneLand.Remove(tmpData.sModeAddress);
                    }
                    pointPlaneLand.Add(tmpData.sModeAddress, pointLatLng);
                }

                if (AirplaneManager.Instance.checkAlermPlane(tmpData.sModeAddress))
                {
                    isCheckedPlane = 3;
                }
            }

            GMapAirPlane tmpAirplane  = new GMapAirPlane(new PointLatLng(tmpData.latitude, tmpData.longtitude), tmpData, isCheckedPlane);
            int          sModeAddress = tmpData.sModeAddress;

            // 轨迹点处理
            List <PointLatLng> points;

            if (keyValuePairs.ContainsKey(sModeAddress))
            {
                points = keyValuePairs[sModeAddress];
                showValue[sModeAddress] = showValue[sModeAddress] + 1;
                if (29 == showValue[sModeAddress])
                {
                    pointMax(points);
                }
                points.Add(pointLatLng);
            }
            else
            {
                points = new List <PointLatLng>(showPointMax);
                points.Add(pointLatLng);
                keyValuePairs.Add(sModeAddress, points);
                showValue[sModeAddress] = 0;
            }

            // 同一架飞机来了新的先从list里面移除掉
            if (listAirplane.ContainsKey(sModeAddress))
            {
                listAirplane.Remove(sModeAddress);
                //showAllPalne();
                //planeOverlay.Markers.Remove(tmpAirplane);
            }
            else
            {
                listAirplane.Add(sModeAddress, tmpAirplane);
            }
            //showOnePlane(tmpAirplane);

            AirplaneManager.Instance.Add(tmpData);


            /*
             *
             *
             * // 全部飞机展示
             * if (airPlaneShow)
             * {
             *  showAllPalne();
             * }
             *
             * // 展示关注飞机与指定地面站的虚线距离
             * showLandStation();
             *
             * gMapControl1.Refresh();
             */
        }