Esempio n. 1
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 });
        }
Esempio 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.触发圈选结束(__匹配号码集);
            }
        }
Esempio n. 3
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));
            _当前测距.距离 = __距离 + _当前测距.距离;
            _上一个点    = __当前位置;
        }
Esempio n. 4
0
        void out地图_MouseMove(object sender, MouseEventArgs e)
        {
            var __当前位置 = _F地图.屏幕坐标转经纬度(e.Location);

            if (_上一个点 == null)
            {
                //提示
                if (_测距点索引.HasValue)
                {
                    _F地图.除点(_测距点索引.Value);
                }
                _测距点索引 = _F地图.添加点(__当前位置, Properties.Resources.测距起点, "右键单击确定起点", null, null, E标题显示方式.Always);
                return;
            }
            if (_测距线索引.HasValue)
            {
                _F地图.除线(_测距线索引.Value);
            }
            if (_测距点索引.HasValue)
            {
                _F地图.除点(_测距点索引.Value);
            }
            var __距离 = H地图算法.测量两点间间距(_上一个点, __当前位置);

            _测距点索引 = _F地图.添加点(__当前位置, Properties.Resources.测距起点, string.Format("总长:{0}\n右键单击确定, 右键双击结束", 获取距离描述(__距离 + _当前测距.距离)), null, null, E标题显示方式.Always);
            _测距线索引 = _F地图.添加线(new List <M经纬度> {
                _上一个点, __当前位置
            }, 1, Color.FromArgb(252, 135, 78));
        }
Esempio n. 5
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;
        }
Esempio n. 6
0
        void out地图_MouseUp(object sender, MouseEventArgs e)
        {
            if (!this.Visible || e.Button != MouseButtons.Right || 当前方式 == E圈选方式.无)
            {
                return;
            }
            //Debug.WriteLine("鼠标释放位置: " + e.Location);
            switch (当前方式)
            {
            case E圈选方式.无:
                break;

            case E圈选方式.矩形:
                if (_鼠标点击位置列表.Count == 0)
                {
                    return;
                }
                var __矩形起点 = _I地图.屏幕坐标转经纬度(_鼠标点击位置列表[0]);
                var __矩形终点 = _I地图.屏幕坐标转经纬度(e.Location);
                if (自动删除圈选)
                {
                    _I地图.除多边形(_圈选图形索引);
                }
                //获取圈选内容
                On处理矩形圈选结束(__矩形起点, __矩形终点);
                _鼠标点击位置列表.Clear();
                break;

            case E圈选方式.圆形:
                if (_鼠标点击位置列表.Count == 0)
                {
                    return;
                }
                var __圆形起点 = _I地图.屏幕坐标转经纬度(_鼠标点击位置列表[0]);
                var __圆形终点 = _I地图.屏幕坐标转经纬度(e.Location);
                if (自动删除圈选)
                {
                    _I地图.除圆(_圈选图形索引);
                }
                //获取圈选内容
                var __圆心 = __圆形起点;
                var __半径 = H地图算法.测量两点间间距(__圆心, __圆形终点);
                On处理圆形圈选结束(__圆心, __半径);
                _鼠标点击位置列表.Clear();
                break;

            case E圈选方式.多边形:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Esempio n. 7
0
        public void 结束()
        {
            _F地图.MouseDown -= out地图_MouseDown;
            _F地图.MouseMove -= out地图_MouseMove;
            _F地图.MouseUp   -= out地图_MouseUp;

            //Debug.WriteLine("鼠标释放位置: " + e.Location);
            var __圆心   = _F地图.屏幕坐标转经纬度(_起点);
            var __当前位置 = _F地图.屏幕坐标转经纬度(_终点);
            //获取圈选内容
            var __半径 = H地图算法.测量两点间间距(__圆心, __当前位置);

            On圈选结束(__圆心, __半径);
        }
Esempio n. 8
0
        private void 绘制圆形(MouseEventArgs e)
        {
            var __起点 = _I地图.屏幕坐标转经纬度(_鼠标点击位置列表[0]);
            var __终点 = _I地图.屏幕坐标转经纬度(e.Location);

            _I地图.除圆(_圈选图形索引);
            var __圆心 = __起点;
            var __半径 = H地图算法.测量两点间间距(__圆心, __终点);

            _圈选图形索引 = _I地图.添加圆(
                __圆心,
                __半径,
                new M区域绘制参数 {
                边框宽度 = 1, 边框颜色 = Color.FromArgb(255, 0, 0, 255), 填充颜色 = Color.FromArgb(55, 135, 206, 235)
            });
        }
Esempio n. 9
0
        void 处理圆形圈选(M经纬度 __圆心, int __半径)
        {
            if (_圈选数据.Count == 0)
            {
                return;
            }
            var __圈选数量 = 0;

            _圈选数据.ForEach(q =>
            {
                if (H地图算法.判断点在圆形内(q, __圆心, __半径))
                {
                    __圈选数量++;
                }
            });
            new F对话框_确定("圈选数量: " + __圈选数量, "操作成功").ShowDialog();
        }
Esempio n. 10
0
        void do保存_Click(object sender, EventArgs e)
        {
            switch (当前方式)
            {
            case E圈选方式.无:
                break;

            case E圈选方式.矩形:
                if (_鼠标点击位置列表.Count != 2)
                {
                    new F对话框_确定("请使用鼠标右键绘图").ShowDialog();
                    return;
                }
                var __矩形起点 = _I地图.屏幕坐标转经纬度(_鼠标点击位置列表[0]);
                var __矩形终点 = _I地图.屏幕坐标转经纬度(_鼠标点击位置列表[1]);
                On处理矩形圈选结束(__矩形起点, __矩形终点);
                break;

            case E圈选方式.圆形:
                if (_鼠标点击位置列表.Count != 2)
                {
                    new F对话框_确定("请使用鼠标右键绘图").ShowDialog();
                    return;
                }
                var __圆形起点 = _I地图.屏幕坐标转经纬度(_鼠标点击位置列表[0]);
                var __圆形终点 = _I地图.屏幕坐标转经纬度(_鼠标点击位置列表[1]);
                var __圆心   = __圆形起点;
                var __半径   = H地图算法.测量两点间间距(__圆心, __圆形终点);
                On处理圆形圈选结束(__圆心, __半径);
                break;

            case E圈选方式.多边形:
                if (_鼠标点击位置列表.Count < 4)
                {
                    new F对话框_确定("请使用鼠标右键绘图").ShowDialog();
                    return;
                }
                var __顶点列表 = _鼠标点击位置列表.Select(q => _I地图.屏幕坐标转经纬度(q)).ToList();
                On处理多边形圈选结束(__顶点列表);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            清除();
        }
Esempio n. 11
0
        private void 绘制圆形(MouseEventArgs e)
        {
            if (_圈选图形索引 > 0)
            {
                _F地图.除圆(_圈选图形索引);
            }
            var __圆心   = _F地图.屏幕坐标转经纬度(_起点);
            var __当前位置 = _F地图.屏幕坐标转经纬度(e.Location);
            var __半径   = H地图算法.测量两点间间距(__圆心, __当前位置);

            _圈选图形索引 = _F地图.添加圆(
                __圆心,
                __半径,
                new M区域绘制参数 {
                边框宽度 = 1, 边框颜色 = Color.FromArgb(255, 0, 0, 255), 填充颜色 = Color.FromArgb(55, 135, 206, 235)
            });
        }
Esempio n. 12
0
        void 处理多边形圈选(List <M经纬度> __顶点列表)
        {
            if (_圈选数据.Count == 0)
            {
                return;
            }
            var __圈选数量 = 0;

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

            _圈选测试数据.ForEach(q =>
            {
                if (H地图算法.判断点在多边形内(_IF地图.纠偏(q), __顶点列表))
                {
                    __圈选数量++;
                }
            });
            MessageBox.Show("圈选数量: " + __圈选数量);
            //_IF地图.添加多边形(__顶点列表, new M区域绘制参数 { 边框宽度 = 1, 边框颜色 = Color.Red});
        }
Esempio n. 14
0
        void 处理圆形圈选(M经纬度 __圆心, int __半径)
        {
            if (_圈选测试数据.Count == 0)
            {
                return;
            }
            var __圈选数量 = 0;

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

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