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); } } } }
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()); }
public Cat021Data GetData() { try { Cat021Data result = qData.Dequeue(); Save(result); return(result); } catch { Cat021Data reData = new Cat021Data(); reData.flightNo = "CA0000"; return(reData); } }
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); }
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; } } }
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); } }
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)); }
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); } } }
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(); } }
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); } }
// 区别飞行器是正常机、凸显机还是中心机;记录轨迹点 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(); */ }