Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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.触发圈选结束(__匹配号码集);
            }
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
        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));
            _当前测距.距离 = __距离 + _当前测距.距离;
            _上一个点    = __当前位置;
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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 });
        }
Exemplo n.º 7
0
        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));
            }
        }
Exemplo n.º 8
0
        protected virtual void On处理圆形圈选结束(M经纬度 圆心, int 半径)
        {
            var handler = 处理圆形圈选结束;

            if (handler != null)
            {
                handler(HGPS坐标转换.转原始坐标(圆心), 半径);
            }
        }
Exemplo n.º 9
0
        protected virtual void On处理矩形圈选结束(M经纬度 左上角, M经纬度 右下角)
        {
            var handler = 处理矩形圈选结束;

            if (handler != null)
            {
                handler(HGPS坐标转换.转原始坐标(左上角), HGPS坐标转换.转原始坐标(右下角));
            }
        }
Exemplo n.º 10
0
        protected virtual void On位置更新(string __号码, M经纬度 __最新位置, List <M经纬度> __轨迹缓存)
        {
            var handler = 位置更新;

            if (handler != null)
            {
                handler(__号码, __最新位置, __轨迹缓存);
            }
        }
Exemplo n.º 11
0
        /// <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取消完毕();
            });
        }
Exemplo n.º 12
0
        void 处理圆形圈选(M经纬度 __圆心, int __半径)
        {
            if (_圈选数据.Count == 0)
            {
                return;
            }
            var __圈选数量 = 0;

            _圈选数据.ForEach(q =>
            {
                if (H地图算法.判断点在圆形内(q, __圆心, __半径))
                {
                    __圈选数量++;
                }
            });
            new F对话框_确定("圈选数量: " + __圈选数量, "操作成功").ShowDialog();
        }
Exemplo n.º 13
0
        void 处理圆形圈选(M经纬度 __圆心, int __半径)
        {
            if (_圈选测试数据.Count == 0)
            {
                return;
            }
            var __圈选数量 = 0;

            _圈选测试数据.ForEach(q =>
            {
                if (H地图算法.判断点在圆形内(_IF地图.纠偏(q), __圆心, __半径))
                {
                    __圈选数量++;
                }
            });
            MessageBox.Show("圈选数量: " + __圈选数量);
            //_IF地图.添加圆(__圆心, __半径, new M区域绘制参数 {边框宽度 = 1, 边框颜色 = Color.Red});
        }
Exemplo n.º 14
0
        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.触发圈选结束(__匹配号码集);
            }
        }
Exemplo n.º 15
0
        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();
        }
Exemplo n.º 16
0
        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();
        }
Exemplo n.º 17
0
        void 处理矩形圈选(M经纬度 __左上角, M经纬度 __右下角)
        {
            if (_圈选数据.Count == 0)
            {
                return;
            }
            var __圈选数量 = 0;
            var __矩形点集 = new List <M经纬度>
            {
                __左上角,
                __左上角.偏移(__右下角.经度 - __左上角.经度, 0),
                __右下角,
                __右下角.偏移(__左上角.经度 - __右下角.经度, 0),
            };

            _圈选数据.ForEach(q =>
            {
                if (H地图算法.判断点在矩形内(q, __矩形点集))
                {
                    __圈选数量++;
                }
            });
            new F对话框_确定("圈选数量: " + __圈选数量, "操作成功").ShowDialog();
        }