private void DrawPoliceCarByJson(JObject json) { try { Graphic gPoliceCar = MapLayers.GetGraphicFromGLayerByID("TITLE", json["TITLE"].ToString(), PublicParams.gLayerPoliceCarGPS); if (gPoliceCar != null) { gPoliceCar.Geometry = new MapPoint((double)json["X"], (double)json["Y"], new SpatialReference(4326)); gPoliceCar.Attributes["X"] = (double)json["X"]; gPoliceCar.Attributes["Y"] = (double)json["Y"]; MapLayers.RefreshGLayerByID(PublicParams.gLayerPoliceCarGPS); if (PublicParams.pubInfoWin.IsOpen == true && (PublicParams.pubInfoWin.Content as JObject)["TITLE"].ToString() == gPoliceCar.Attributes["TITLE"].ToString()) { PublicParams.pubInfoWin.Anchor = gPoliceCar.Geometry as MapPoint; Point screenPoint = PublicParams.pubMainMap.MapToScreen(gPoliceCar.Geometry as MapPoint); MapMethods.SendPoliceCarPositon(gPoliceCar, Convert.ToInt32(screenPoint.X), Convert.ToInt32(screenPoint.Y)); } } else//不存在该车辆,先添加该车辆到地图上 { MapPoint mpGPS = new MapPoint((double)json["X"], (double)json["Y"], new SpatialReference(4326)); Symbol sGPS = App.Current.Resources["PoliceCarOnline"] as Symbol; Graphic gNewCar = new Graphic() { Symbol = sGPS, Geometry = mpGPS }; gNewCar.Attributes.Add("TITLE", json["TITLE"].ToString()); gNewCar.Attributes.Add("HH", json["HH"].ToString());//呼号 gNewCar.Attributes.Add("Class", "PoliceCar"); gNewCar.Attributes.Add("X", (double)json["X"]); gNewCar.Attributes.Add("Y", (double)json["Y"]); MapLayers.AddGraphicToGLayerByLayerID(gNewCar, PublicParams.gLayerPoliceCarGPS); MapLayers.RefreshGLayerByID(PublicParams.gLayerPoliceCarGPS); } } catch (Exception) { } }
/// <summary> /// LPY 2015-9-6 添加 /// 处理指令 /// </summary> /// <param name="rejson">待解析处理的JSON字符串</param> public void HandleCommands(JObject rejson) { switch (rejson["CMD"].ToString()) { case "00000": //底图切换 MapMethods.ChangeMapByJson(rejson); break; case "00001": //地图移动、缩放 //MapMethods.MoveAndZoomMapByJson(rejson); PublicParams.pubX = Convert.ToDouble(rejson["CENTX"].ToString()); PublicParams.pubY = Convert.ToDouble(rejson["CENTY"].ToString()); PublicParams.pubLevel = Convert.ToInt32(rejson["LEVEL"].ToString()); //LogHelper.WriteLog(PublicParams.type,"从客户端收到:"+ rejson.ToString()); break; case "00105": //接收到客户端发来的Graphic,显示在大屏上 MapMethods.DrawBufferByJSON(rejson); //MapLayers.AddGraphicToGLayerByLayerID(JsonHelper.FromJson<Graphic>(rejson["GRAPHIC"].ToString()), PublicParams.gLayerDrawing); break; case "00106": //清空Buffer图层上的Graphics MapMethods.ClearBufferLayer(); break; case "10003": //根据客户端发来的Pad窗口名称和开关指令,执行大屏上的相应Pad显示或隐藏 PadHelper.SwitchPadByName(rejson["ITEM"].ToString(), rejson["SWITCH"].ToString()); break; case "00107": //打开InfoWindow //PublicParams.pubInfoWin.IsOpen = true; MapMethods.ShowInfoWindowByJSON(rejson); break; case "00108": PublicParams.pubInfoWin.IsOpen = false; break; case "00109": //清空测距离和面积图层 MapMethods.ClearLengthOrAreaLayer(); break; case "00110": //在大屏上标出测量的距离或者面积结果 MapMethods.ShowLengthOrAreaByJSON(rejson); break; case "00111": //在大屏上画出新案件点周边的视频点 MapMethods.ShowSearchCamerasByJson(rejson); break; case "00037": //弹出视频背景板 PublicParams.padVideos.Height = PublicParams.videoPadHeight; PublicParams.padVideos.Width = PublicParams.videoPadWidth; //PublicParams.padVideos.BeginStoryboard(App.Current.FindResource("StoryboardForPadVideosOpen") as Storyboard); break; case "00038": //收回视频背景板 PublicParams.padVideos.Height = 0; PublicParams.padVideos.Width = 0; //PadVideos.ClearPadTitles(); //PublicParams.padVideos.BeginStoryboard(App.Current.FindResource("StoryboardForPadVideosClose") as Storyboard); break; case "00029": //聚合图 MapLayers.SwitchLayerByID(rejson["LAYERID"].ToString(), rejson["SWITCH"].ToString()); break; case "00030": //热力图显隐 MapLayers.SwitchLayerByID(rejson["LAYERID"].ToString(), rejson["SWITCH"].ToString()); break; case "00031": //显示隐藏相应图层-FeatureLayer MapLayers.SwitchLayerByID(rejson["LAYERID"].ToString(), rejson["SWITCH"].ToString()); break; case "00032": //显示隐藏相应图层-GraphicsLayer MapLayers.SwitchLayerByID(rejson["LAYERID"].ToString(), rejson["SWITCH"].ToString()); break; case "00033": //清空GraphicsLayer图层 MapLayers.ClearGLayerByID(rejson["LAYERID"].ToString()); PublicParams.listCase.Clear(); break; case "00039": //根据指令显示或清空视频背景板相应背景的文字 PadVideos.ShowHideTextByTitle(rejson["TITLE"].ToString(), Convert.ToInt32(rejson["ID"].ToString()), rejson["SWITCH"].ToString()); break; case "00065": //控制端点击菜单指令 //PublicParams.padMenu.BeginStoryboard(App.Current.FindResource("StoryboardForPadMenuShow") as Storyboard); //PublicParams.padMenu.DrawMenu2ByJson(rejson); break; case "00061": //隐藏菜单指令 //PublicParams.padMenu.DrawMenu2ByJson(rejson); break; case "00041": //调整单个开窗位置 ParamsHelper.ExecParamsFromJson(rejson); break; case "00042": //保存全部窗口位置 ParamsHelper.ExecSaveParamsFromJson(rejson); break; case "00043": //调整单个开窗位置和窗体名称 //ParamsHelper.ExecParamsAndNameFromJson(rejson); break; default: break; } }
/// <summary> /// LPY 2015-9-6 添加 /// 循环接收客户端发送来的指令,转换成标准JSON字符串后,交由HandleCommands()处理 /// </summary> public void ClientWork() { byte[] bytes = new byte[256 * 1024]; string strCMD = string.Empty; int intReceivedBytesLength; string strReceived = string.Empty; while (true) { try { intReceivedBytesLength = socClient.Receive(bytes, bytes.Length, 0); if (intReceivedBytesLength == 0) { break; } strReceived += Encoding.UTF8.GetString(bytes, 0, intReceivedBytesLength); //LogHelper.WriteLog(strReceived); //LPY 2016-4-21 修改 增加一个分包符号,处理数据包粘包问题 while (strReceived.Contains(PublicParams.splitChar)) { int splitCharIndex = strReceived.IndexOf(PublicParams.splitChar); strCMD += strReceived.Substring(0, splitCharIndex); JObject json = JObject.Parse(strCMD); if (json["CMD"].ToString() == "SYNC") { PublicParams.pubMainMap.Dispatcher.BeginInvoke(new Action(() => { string strMapPosition = string.Format("{{\"CMD\":\"SYNCR\",\"CENTX\":{0},\"CENTY\":{1},\"LEVEL\":{2}}}", PublicParams.pubMainMap.Extent.GetCenter().X, PublicParams.pubMainMap.Extent.GetCenter().Y, (MapMethods.GetLevel(PublicParams.pubMainMap.Resolution) - 4).ToString()); SendCommandsToClient(strMapPosition); //LogHelper.WriteLog("发回客户端:" + strMapPosition); })); } else { PublicParams.pubMainMap.Dispatcher.BeginInvoke(new Action(() => { HandleCommands(json); })); } strCMD = string.Empty; strReceived = strReceived.Substring(splitCharIndex + 1, strReceived.Length - splitCharIndex - 1); } } catch (Exception) { } } }