private M标记 添加标记(M号码 __号码) { var __随机数 = new Random(); var __随机数1 = __随机数.NextDouble() * 0.01; var __随机数2 = __随机数.NextDouble() * 0.01; var __标记 = new M标记 { Id = __号码.Id, 称 = __号码.称, 号码 = __号码.号码, 描述 = __号码.描述, 经度 = 118.829829 + __随机数1, 纬度 = 32.031709 + __随机数2, 打开描述 = false, }; var __序列化器 = new JavaScriptSerializer(); var __字符串 = __序列化器.Serialize(__标记); this.Invoke(new Action(() => { _HtmlDocument.InvokeScript("添加标记", new object[] { __字符串 }); })); return(__标记); }
private void 添加标记(M标记 __标记) { var __序列化器 = new JavaScriptSerializer(); var __字符串 = __序列化器.Serialize(__标记); try { this.Invoke(new Action(() => { _HtmlDocument.InvokeScript("添加标记", new object[] { __字符串 }); })); } catch (Exception) { //记录异常,排除窗口关闭时更新界面 } }
private void 模拟数据(object __参数) { var __格式 = __参数 as Tuple <M号码, DateTime>; var __号码 = __格式.Item1; var __时间 = __格式.Item2; bool __第一次 = true; var __随机数 = new Random(); var __起始经度 = 118.829829 + __随机数.NextDouble() * 0.1; var __起始纬度 = 32.031709 + __随机数.NextDouble() * 0.1; var __次数 = 1; while (_标记缓存.ContainsKey(__号码.Id) && _跟踪开始时间.ContainsKey(__号码.Id) && _跟踪开始时间[__号码.Id] == __时间) { if (!__第一次) { 除标记(__号码.Id); } else { __第一次 = false; } var __随机数1 = __随机数.NextDouble() * 0.001; var __随机数2 = __随机数.NextDouble() * 0.001; __起始经度 += __随机数1; __起始纬度 += __随机数2; var __标记 = new M标记 { Id = __号码.Id, 称 = __号码.称, 号码 = __号码.号码, 描述 = __号码.描述, 经度 = __起始经度, 纬度 = __起始纬度, 打开描述 = false, 误差半径 = 20, 方向 = 30 * __次数++ % 360, 时间 = DateTime.Now.ToString(), }; lock (_标记缓存锁) { _标记缓存[__号码.Id] = 添加标记(__标记); } System.Threading.Thread.Sleep(__随机数.Next(3, 30) * 1000); } }
void in定时器_Tick(object sender, EventArgs e) { if (this._暂停) { return; } var __播放起始时间 = _当前播放时间; _当前播放时间 = _当前播放时间.AddMilliseconds(_定时器间隔 * _播放倍速); this.out当前时间.Text = _当前播放时间.ToString(); var __进度 = (int)(_当前播放时间.Subtract(_起始时间).TotalSeconds *this.out播放进度.Maximum / _结束时间.Subtract(_起始时间).TotalSeconds); this.out播放进度.Value = Math.Min(this.out播放进度.Maximum, __进度); foreach (var __轨迹信息 in _未播轨迹列表) { //查找对应时段内的轨迹,如果有则删除原标记,添加新标记 var __匹配GPS = __轨迹信息.GPS列表.FindLast(q => q.时间 <= _当前播放时间); if (__匹配GPS != null) { 除标记(__轨迹信息.号码.Id); var __标记 = new M标记 { Id = __轨迹信息.号码.Id, 称 = __轨迹信息.号码.称, 号码 = __轨迹信息.号码.号码, 描述 = __轨迹信息.号码.描述, 经度 = __匹配GPS.经度, 纬度 = __匹配GPS.纬度, 打开描述 = false, 误差半径 = __匹配GPS.误差半径, 方向 = __匹配GPS.方向, 颜色 = __轨迹信息.轨迹颜色, 时间 = __匹配GPS.时间.ToString(), }; 添加标记(__标记); _标记缓存[__轨迹信息.号码.Id] = __标记; __轨迹信息.GPS列表.RemoveAll(q => q.时间 <= _当前播放时间); _跟踪状态[__标记.Id] = "在线"; } else { //检测时间状态 if (!_标记缓存.ContainsKey(__轨迹信息.号码.Id)) { continue; } var __标记 = _标记缓存[__轨迹信息.号码.Id]; DateTime __最后时间; if (!DateTime.TryParse(__标记.时间, out __最后时间)) { continue; } if (__最后时间.AddSeconds(_离线间隔) < _当前播放时间) { if (!_跟踪状态.ContainsKey(__标记.Id) || _跟踪状态[__标记.Id] != "离线") { _跟踪状态[__标记.Id] = "离线"; 设置标注样式(__标记.Id, "离线"); System.Diagnostics.Debug.WriteLine(__标记.Id + "离线"); } } else if (__最后时间.AddSeconds(_即将离线间隔) < DateTime.Now) { if (!_跟踪状态.ContainsKey(__标记.Id) || _跟踪状态[__标记.Id] != "即将离线") { _跟踪状态[__标记.Id] = "即将离线"; 设置标注样式(__标记.Id, "即将离线"); System.Diagnostics.Debug.WriteLine(__标记.Id + "即将离线"); } } } } if (_结束时间 <= _当前播放时间) { do停止.PerformClick(); } }