void _区域检索_处理圆形圈选结束(M经纬度 __圆心, int __半径) { _区域检索索引.ForEach(q => _IF地图.除点(q)); var __关键字 = this.in区域检索_关键字.Text.Trim(); if (string.IsNullOrEmpty(__关键字)) { MessageBox.Show("请输入关键字"); return; } try { var __点集合 = H信息查询.区域检索(__关键字, __圆心, __半径); if (__点集合.Count == 0) { MessageBox.Show("未找到信息"); return; } __点集合.ForEach(q => _区域检索索引.Add(_IF地图.添加点(q.Item1, H图标.获取图标(E常用图标.默认图标_红色), q.Item2, null, null, E标题显示方式.Always))); //_I地图.定位(__点集合.Select(q => q.Item1).ToList()); } catch (NotImplementedException) { MessageBox.Show("该功能未实现"); } catch (Exception ex) { MessageBox.Show("未找到信息\n\r" + ex.Message); } }
void _IV_矩形圈选结束(M经纬度 __左上角, M经纬度 __右下角) { var __匹配号码集 = new List <string>(); var __矩形点集 = new List <M经纬度> { __左上角, __左上角.偏移(__右下角.经度 - __左上角.经度, 0), __右下角, __右下角.偏移(__左上角.经度 - __右下角.经度, 0), }; m_lock.EnterReadLock(); foreach (var kv in _当前显示号码集) { var __号码 = kv.Key; var __位置 = kv.Value.位置; if (__位置 != null) { if (H地图算法.判断点在矩形内(_IF地图.纠偏(__位置), __矩形点集)) { __匹配号码集.Add(__号码); } } } m_lock.ExitReadLock(); if (__匹配号码集.Count > 0) { _IV.触发圈选结束(__匹配号码集); } }
void out地图_MouseDoubleClick(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Right || _上一个点 == null) { return; } _F地图.除点(_当前测距.点集合.Last()); //_F地图.删除线(_当前测距.线集合.Last()); _当前测距.点集合.RemoveAt(_当前测距.点集合.Count - 1); var __当前位置 = _F地图.屏幕坐标转经纬度(e.Location); var __距离 = H地图算法.测量两点间间距(_上一个点, __当前位置); //_当前测距.线集合.Add(_F地图.添加线(new List<M经纬度> { _上一个点, __当前位置 }, 1, Color.FromArgb(252, 135, 78))); _当前测距.点集合.Add(_F地图.添加点(__当前位置, Properties.Resources.测距终点, string.Format("终点:{0}", 获取距离描述(__距离 + _当前测距.距离)), _当前测距, null, E标题显示方式.Always)); _当前测距.距离 = __距离 + _当前测距.距离; _所有测距.Add(_当前测距); On测距结果(_当前测距.距离); _上一个点 = null; if (_测距线索引.HasValue) { _F地图.除线(_测距线索引.Value); } if (_测距点索引.HasValue) { _F地图.除点(_测距点索引.Value); } _测距点索引 = null; _测距线索引 = null; }
void out地图_MouseClick(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Right) { return; } var __当前位置 = _F地图.屏幕坐标转经纬度(e.Location); if (_上一个点 == null) { //起点 _当前测距 = new M测距(); _当前测距.点集合.Add(_F地图.添加点(__当前位置, Properties.Resources.测距起点, "起点", null, null, E标题显示方式.Always)); _上一个点 = __当前位置; return; } var __距离 = H地图算法.测量两点间间距(_上一个点, __当前位置); _当前测距.线集合.Add(_F地图.添加线(new List <M经纬度> { _上一个点, __当前位置 }, 2, Color.FromArgb(252, 135, 78))); _当前测距.点集合.Add(_F地图.添加点(__当前位置, Properties.Resources.测距起点, 获取距离描述(__距离 + _当前测距.距离), null, null, E标题显示方式.Always)); _当前测距.距离 = __距离 + _当前测距.距离; _上一个点 = __当前位置; }
void do逆地址编码_Click(object sender, EventArgs e) { var __经度 = this.in逆地址编码_经度.Text.Trim(); var __纬度 = this.in逆地址编码_纬度.Text.Trim(); if (string.IsNullOrEmpty(__经度) || string.IsNullOrEmpty(__纬度)) { _地址编码索引.ForEach(q => _IF地图.除点(q)); return; } try { var __点 = new M经纬度(double.Parse(__经度), double.Parse(__纬度)) { 类型 = E坐标类型.谷歌 }; var __地名 = H信息查询.逆地址编码(__点); if (string.IsNullOrEmpty(__地名)) { MessageBox.Show("未找到地名"); return; } _地址编码索引.Add(_IF地图.添加点(__点, H图标.获取图标(E常用图标.默认图标_红色), __地名, null, null, E标题显示方式.Always)); _IF地图.定位(__点); MessageBox.Show(__地名); } catch (NotImplementedException) { MessageBox.Show("该功能未实现"); } catch (Exception ex) { MessageBox.Show("未找到地名\n\r" + ex.Message); } }
void 处理矩形圈选(M经纬度 __左上角, M经纬度 __右下角) { if (_圈选测试数据.Count == 0) { return; } var __圈选数量 = 0; var __矩形点集 = new List <M经纬度> { __左上角, __左上角.偏移(__右下角.经度 - __左上角.经度, 0), __右下角, __右下角.偏移(__左上角.经度 - __右下角.经度, 0), }; _圈选测试数据.ForEach(q => { if (H地图算法.判断点在矩形内(_IF地图.纠偏(q), __矩形点集)) { __圈选数量++; } }); MessageBox.Show("圈选数量: " + __圈选数量); //_IF地图.添加矩形(__左上角, __右下角, new M区域绘制参数 { 边框宽度 = 1, 边框颜色 = Color.Red }); }
void do添加覆盖物2_Click(object sender, EventArgs e) { //添加随机用户麻点 var r = new Random(); var __图标 = H图标.获取图标(E常用图标.默认图标_红色_小); for (int i = 0; i < 5000; i++) { var __经度 = _中心位置.经度 - 0.5 + r.NextDouble() * 1; var __纬度 = _中心位置.纬度 - 0.5 + r.NextDouble() * 1; var __经纬度 = new M经纬度(__经度, __纬度); _圈选测试数据.Add(__经纬度); } //_圈选测试数据.Add(new M经纬度(118.8200000, 32.0500000)); //_圈选测试数据.Add(new M经纬度(118.8220000, 32.0520000)); //_圈选测试数据.Add(new M经纬度(118.8240000, 32.0540000)); //_圈选测试数据.Add(new M经纬度(118.8160000, 32.0560000)); //_圈选测试数据.Add(new M经纬度(118.8160000, 32.0580000)); _麻点图索引.Add(_IF地图.添加麻点图(_圈选测试数据, __图标)); //添加行政区域 var __行政区 = H行政区位置.所有.Find(q => q.省 == "江苏省" && q.市 == "南京市" && q.区 == "浦口区"); if (__行政区 != null && __行政区.边界坐标.Count > 0) { _线索引.Add(_IF地图.添加线(__行政区.边界坐标[0], 2, Color.Blue)); } }
protected virtual void On处理圆形圈选结束(M经纬度 圆心, int 半径) { var handler = 处理圆形圈选结束; if (handler != null) { handler(HGPS坐标转换.转原始坐标(圆心), 半径); } }
protected virtual void On处理矩形圈选结束(M经纬度 左上角, M经纬度 右下角) { var handler = 处理矩形圈选结束; if (handler != null) { handler(HGPS坐标转换.转原始坐标(左上角), HGPS坐标转换.转原始坐标(右下角)); } }
protected virtual void On位置更新(string __号码, M经纬度 __最新位置, List <M经纬度> __轨迹缓存) { var handler = 位置更新; if (handler != null) { handler(__号码, __最新位置, __轨迹缓存); } }
/// <param name="__更新频率">毫秒</param> public void 订阅(int __数量, int __更新频率, M经纬度 __参考位置) { 轨迹缓存.Clear(); 订阅中 = true; var __随机数 = new Random(); Task.Factory.StartNew(() => { while (订阅中) { var __监视器 = new Stopwatch(); __监视器.Start(); for (int i = 0; i < __数量; i++) { var __号码 = i.ToString(); if (!轨迹缓存.ContainsKey(__号码)) { var __初始经度偏移量 = __随机数.NextDouble() * 0.0002 * __数量 * (__随机数.NextDouble() > 0.5 ? -1 : 1); var __初始纬度偏移量 = __随机数.NextDouble() * 0.0002 * __数量 * (__随机数.NextDouble() > 0.5 ? -1 : 1); 轨迹缓存[__号码] = new List <M经纬度> { __参考位置.偏移(__初始经度偏移量, __初始纬度偏移量) }; } var __缓存 = 轨迹缓存[__号码]; var __上次位置 = __缓存.Last(); var __经度偏移量 = __随机数.NextDouble() * 0.0005 * (__随机数.NextDouble() > 0.2 ? -1 : 1); var __纬度偏移量 = __随机数.NextDouble() * 0.0005 * (__随机数.NextDouble() > 0.2 ? -1 : 1); var __新位置 = __上次位置.偏移(__经度偏移量, __纬度偏移量); __缓存.Add(__新位置); if (__缓存.Count > 10) { __缓存.RemoveAt(0); } if (!订阅中) { break; } On位置更新(__号码, __新位置, new List <M经纬度>(__缓存)); Thread.Sleep(__随机数.Next(0, __更新频率 / __数量)); } __监视器.Stop(); var __耗时 = (int)__监视器.ElapsedMilliseconds; if (__耗时 < __更新频率 && 订阅中) { Thread.Sleep(__更新频率 - __耗时); } } On取消完毕(); }); }
void 处理圆形圈选(M经纬度 __圆心, int __半径) { if (_圈选数据.Count == 0) { return; } var __圈选数量 = 0; _圈选数据.ForEach(q => { if (H地图算法.判断点在圆形内(q, __圆心, __半径)) { __圈选数量++; } }); new F对话框_确定("圈选数量: " + __圈选数量, "操作成功").ShowDialog(); }
void 处理圆形圈选(M经纬度 __圆心, int __半径) { if (_圈选测试数据.Count == 0) { return; } var __圈选数量 = 0; _圈选测试数据.ForEach(q => { if (H地图算法.判断点在圆形内(_IF地图.纠偏(q), __圆心, __半径)) { __圈选数量++; } }); MessageBox.Show("圈选数量: " + __圈选数量); //_IF地图.添加圆(__圆心, __半径, new M区域绘制参数 {边框宽度 = 1, 边框颜色 = Color.Red}); }
void _IV_圆形圈选结束(M经纬度 __圆心, int __半径) { var __匹配号码集 = new List <string>(); foreach (var kv in _当前显示号码集) { var __号码 = kv.Key; var __位置 = kv.Value.位置; if (__位置 != null) { if (H地图算法.判断点在圆形内(_IF地图.纠偏(__位置), __圆心, __半径)) { __匹配号码集.Add(__号码); } } } if (__匹配号码集.Count > 0) { _IV.触发圈选结束(__匹配号码集); } }
private void 显示地图(F纯地图 __纯地图, string __窗口标题) { var __空窗口 = new F空窗口(__纯地图, __窗口标题); __空窗口.Shown += (sender1, e1) => { var __中心位置 = __纯地图.地图.屏幕坐标转经纬度(new Point(this.Width / 2, this.Height / 2)); var __随机数 = new Random(); for (int i = 0; i < 5000; i++) { var __经度 = __中心位置.经度 - 0.5 + __随机数.NextDouble() * 1; var __纬度 = __中心位置.纬度 - 0.5 + __随机数.NextDouble() * 1; var __经纬度 = new M经纬度(__经度, __纬度) { 类型 = E坐标类型.设备 }; _圈选数据.Add(__经纬度); } __纯地图.地图.添加麻点图(_圈选数据, GPS地图.Properties.Resources.最近更新); }; __空窗口.ShowDialog(); __空窗口.Dispose(); }
void 处理圆形圈选(M经纬度 __圆心, int __半径) { var __所有图标 = _F显示号码._FGPS.查询所有图标(); if (__所有图标.Count == 0) { return; } var __号码列表 = new List <M个号>(); __所有图标.ForEach(q => { if (H地图算法.判断点在圆形内(q.位置.转M经纬度(), __圆心, __半径)) { var __标识 = (string)q.业务标识; var __匹配 = _所有个号.Find(k => k.号码.ToString() == __标识); if (__匹配 != null) { __号码列表.Add(__匹配); } } }); new F空窗口(new F个号列表(__号码列表, _F显示号码), "选中号码").ShowDialog(); }
void 处理矩形圈选(M经纬度 __左上角, M经纬度 __右下角) { if (_圈选数据.Count == 0) { return; } var __圈选数量 = 0; var __矩形点集 = new List <M经纬度> { __左上角, __左上角.偏移(__右下角.经度 - __左上角.经度, 0), __右下角, __右下角.偏移(__左上角.经度 - __右下角.经度, 0), }; _圈选数据.ForEach(q => { if (H地图算法.判断点在矩形内(q, __矩形点集)) { __圈选数量++; } }); new F对话框_确定("圈选数量: " + __圈选数量, "操作成功").ShowDialog(); }