Пример #1
0
        /// <summary>
        /// 保存元素到数据库
        /// </summary>
        /// <param name="geometry"></param>
        public static void AddObjectIntoDB(decimal mapid, decimal layerid, Geometry geometry)
        {
            decimal id = MapDBClass.GetObjectId(mapid, layerid);

            if (geometry is Polygon)
            {
                ((Polygon)geometry).ID = id;
            }
            else if (geometry is EasyMap.Geometries.Point)
            {
                ((EasyMap.Geometries.Point)geometry).ID = id;
            }
            else if (geometry is MultiPolygon)
            {
                ((MultiPolygon)geometry).ID = id;
            }
            else if (geometry is MultiPoint)
            {
                ((MultiPoint)geometry).ID = id;
            }
            else if (geometry is MultiLineString)
            {
                ((MultiLineString)geometry).ID = id;
            }
            else if (geometry is LineString)
            {
                ((LineString)geometry).ID = id;
            }
            else if (geometry is LinearRing)
            {
                ((LinearRing)geometry).ID = id;
            }
            else
            {
                return;
            }
            MapDBClass.InsertObject(mapid, layerid, geometry);
        }
Пример #2
0
        protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);
            if (e.Button == MouseButtons.Right)
            {
                if (!_DrawEnd)
                {
                    if (MainMapImage.ActiveTool == MapImage.Tools.MeasureArea ||
                        MainMapImage.ActiveTool == MapImage.Tools.DefineArea ||
                        MainMapImage.ActiveTool == MapImage.Tools.SelectPoint ||
                        MainMapImage.ActiveTool == MapImage.Tools.ZoomArea)
                    {
                        if (MainMapImage.ActiveTool == MapImage.Tools.ZoomArea)
                        {
                            this.Visible = false;
                            if (AfterDefineArea != null)
                            {
                                AfterDefineArea(SelectionType, null, _R);
                            }
                            return;
                        }
                        if (marea.ExteriorRing.Vertices.Count > 0)
                        {
                            marea.ExteriorRing.Vertices.RemoveAt(marea.ExteriorRing.Vertices.Count - 1);
                        }
                        else
                        {
                            this.Visible = false;
                            if (AfterDefineArea != null)
                            {
                                AfterDefineArea(SelectionType, null, _R);
                            }
                            return;
                        }
                        if (MainMapImage.ActiveTool == MapImage.Tools.MeasureArea)
                        {
                            if (SetArea != null)
                            {
                                SetArea(marea.Area);
                            }
                        }
                        else if (MainMapImage.ActiveTool == MapImage.Tools.DefineArea ||
                                 MainMapImage.ActiveTool == MapImage.Tools.SelectPoint)
                        {
                            Refresh();

                            Polygon newArea = null;
                            string  text    = null;
                            if (MainMapImage.ActiveTool == MapImage.Tools.DefineArea)
                            {
                                InputStringForm form = new InputStringForm("请输入区域名称:", "");

                                if (form.ShowDialog() == DialogResult.OK)
                                {
                                    //text = form.InputContext;
                                    marea.Text = form.InputContext;
                                }
                                else
                                {
                                    this.Visible = false;
                                    if (AfterDefineArea != null)
                                    {
                                        AfterDefineArea(SelectionType, null, _R);
                                    }
                                    return;
                                }
                                //取得当前图层
                                VectorLayer layer = (VectorLayer)MainMapImage.Map.CurrentLayer;
                                //取得图层数据源
                                GeometryProvider provider = (GeometryProvider)layer.DataSource;
                                //添加当前定义的多边形
                                newArea      = marea.Clone();
                                newArea.Text = marea.Text;
                                newArea.ID   = marea.ID;
                                provider.Geometries.Add(newArea);
                                //强制地图刷新
                                MainMapImage.Refresh();
                            }
                            if (AfterDefineArea != null)
                            {
                                AfterDefineArea(SelectionType, marea, _R);
                            }
                            if (newArea != null)
                            {
                                newArea.ID = marea.ID;
                            }
                            //重新初始化多边形
                            marea        = new Polygon();
                            this.Visible = false;
                        }
                    }

                    else if (MainMapImage.ActiveTool == MapImage.Tools.MeasureLength)
                    {
                        mline.Vertices.RemoveAt(mline.Vertices.Count - 1);
                        //设置测量窗口的信息
                        if (SetLength != null)
                        {
                            SetLength(mline.Length, mline.Length - oldlength);
                        }
                    }
                    Refresh();
                    _DrawEnd = true;
                }
            }
            if (e.Button == MouseButtons.Left)
            {
                if (_DrawEnd)
                {
                    Initial(SelectionType);
                }
                _DrawEnd = false;
                //将图像坐标转化为地图坐标
                EasyMap.Geometries.Point WorldPos = MainMapImage.Map.ImageToWorld(new System.Drawing.Point(e.X, e.Y));
                //保存上一次的长度,以便计算出最后一段直线的长度
                oldlength = mline.Length;
                if (SelectionType == SELECTION_TYPE.CIRCLETEMP)
                {
                    //添加救援点
                    //double radius = 10;
                    //double deltaDegrees = 2;
                    //double deltaRadians = (Math.PI / 180) * deltaDegrees;
                    EasyMap.Geometries.Point marea = new Geometries.Point();
                    marea = new EasyMap.Geometries.Point(WorldPos.X, WorldPos.Y);
                    EasyMap.Geometries.Point newArea = new Geometries.Point();
                    //string text = null;
                    if (MainMapImage.ActiveTool == MapImage.Tools.DefineArea)
                    {
                        InputStringForm form = new InputStringForm("请输入救援力量名称:", "");

                        if (form.ShowDialog() == DialogResult.OK)
                        {
                            //text = form.InputContext;
                            marea.Text = form.InputContext;
                        }
                        else
                        {
                            this.Visible = false;
                            if (AfterDefineArea1 != null)
                            {
                                AfterDefineArea1(SelectionType, null, _R);
                            }
                            return;
                        }
                        //取得当前图层
                        VectorLayer layer = (VectorLayer)MainMapImage.Map.CurrentLayer;
                        //取得图层数据源
                        GeometryProvider provider = (GeometryProvider)layer.DataSource;
                        //添加当前定义的多边形
                        marea.ID     = MapDBClass.GetObjectId(MainMapImage.Map.MapId, layer.ID);
                        newArea      = marea.Clone();
                        newArea.Text = marea.Text;
                        newArea.ID   = marea.ID;
                        provider.Geometries.Add(newArea);

                        //强制地图刷新
                        MainMapImage.Refresh();
                    }

                    if (AfterDefineArea1 != null)
                    {
                        AfterDefineArea1(SelectionType, marea, _R);
                    }
                    //强制地图刷新
                    MainMapImage.Refresh(); newArea.ID = marea.ID;
                    //重新初始化多边形
                    //marea = new Polygon();
                    marea        = new Geometries.Point();
                    this.Visible = false;
                    ////强制地图刷新
                    MainMapImage.Refresh();
                }
                else if (SelectionType == SELECTION_TYPE.PROBLEMPOINT)
                {
                    EasyMap.Geometries.Point marea = new Geometries.Point();
                    marea = new EasyMap.Geometries.Point(WorldPos.X, WorldPos.Y);
                    EasyMap.Geometries.Point newArea = new Geometries.Point();
                    if (MainMapImage.ActiveTool == MapImage.Tools.DefineArea)
                    {
                        InputStringForm form = new InputStringForm("请输入遇难点名称:", "");

                        if (form.ShowDialog() == DialogResult.OK)
                        {
                            //text = form.InputContext;
                            marea.Text = form.InputContext;
                        }
                        else
                        {
                            this.Visible = false;
                            if (AfterDefineArea1 != null)
                            {
                                AfterDefineArea1(SelectionType, null, _R);
                            }
                            return;
                        }
                        //取得当前图层
                        VectorLayer layer = (VectorLayer)MainMapImage.Map.CurrentLayer;
                        //取得图层数据源
                        GeometryProvider provider = (GeometryProvider)layer.DataSource;
                        marea.ID = MapDBClass.GetObjectId(MainMapImage.Map.MapId, layer.ID);
                        //添加当前定义的多边形
                        newArea      = marea.Clone();
                        newArea.Text = marea.Text;
                        newArea.ID   = marea.ID;
                        provider.Geometries.Add(newArea);

                        //强制地图刷新
                        MainMapImage.Refresh();
                    }

                    if (AfterDefineArea1 != null)
                    {
                        AfterDefineArea1(SelectionType, marea, _R);
                    }
                    //强制地图刷新
                    MainMapImage.Refresh();
                    newArea.ID   = marea.ID;
                    marea        = new Geometries.Point();
                    this.Visible = false;
                    ////强制地图刷新
                    MainMapImage.Refresh();
                }
                else if (SelectionType == SELECTION_TYPE.RECTANGLE ||
                         SelectionType == SELECTION_TYPE.CIRCLE)
                {
                    marea.ExteriorRing.Vertices.Add(WorldPos);
                    marea.ExteriorRing.Vertices.Add(new EasyMap.Geometries.Point(WorldPos.X, WorldPos.Y));
                    if (marea.ExteriorRing.Vertices.Count > 2)
                    {
                        _DrawEnd     = true;
                        this.Visible = false;
                        if (SelectionType == SELECTION_TYPE.RECTANGLE)
                        {
                            double x1 = marea.ExteriorRing.Vertices[0].X;
                            double y1 = marea.ExteriorRing.Vertices[0].Y;
                            double x3 = marea.ExteriorRing.Vertices[1].X;
                            double y3 = marea.ExteriorRing.Vertices[1].Y;
                            double x2 = x1;
                            double y2 = y3;
                            double x4 = x3;
                            double y4 = y1;
                            marea.ExteriorRing.Vertices.Clear();
                            marea.ExteriorRing.Vertices.Add(new EasyMap.Geometries.Point(x1, y1));
                            marea.ExteriorRing.Vertices.Add(new EasyMap.Geometries.Point(x2, y2));
                            marea.ExteriorRing.Vertices.Add(new EasyMap.Geometries.Point(x3, y3));
                            marea.ExteriorRing.Vertices.Add(new EasyMap.Geometries.Point(x4, y4));
                        }
                        if (AfterDefineArea != null)
                        {
                            AfterDefineArea(SelectionType, marea, _R);
                        }
                        //Polygon newArea = null;
                        //if (SelectionType == SELECTION_TYPE.CIRCLE)
                        //{
                        //    InputStringForm form = new InputStringForm("请输入区域名称:", "");

                        //    if (form.ShowDialog() == DialogResult.OK)
                        //    {
                        //        //text = form.InputContext;
                        //        marea.Text = form.InputContext;
                        //    }
                        //    else
                        //    {
                        //        this.Visible = false;
                        //        if (AfterDefineArea != null)
                        //        {
                        //            AfterDefineArea(SelectionType, null, _R);
                        //        }
                        //        return;
                        //    }
                        //    //取得当前图层
                        //    VectorLayer layer = (VectorLayer)MainMapImage.Map.CurrentLayer;
                        //    //取得图层数据源
                        //    GeometryProvider provider = (GeometryProvider)layer.DataSource;
                        //    //添加当前定义的多边形
                        //    newArea = marea.Clone();
                        //    newArea.Text = "";
                        //    newArea.ID = marea.ID;
                        //    provider.Geometries.Add(newArea);
                        //    //强制地图刷新
                        //    MainMapImage.Refresh();
                        //}
                        return;
                    }
                }
                else if (SelectionType == SELECTION_TYPE.CIRCLE_RADIO)
                {
                    marea.ExteriorRing.Vertices.Add(WorldPos);
                    XYInputForm form = new XYInputForm();
                    form.txtX.Enabled = false;
                    form.txtY.Enabled = false;
                    form.XX           = marea.ExteriorRing.Vertices[0].X;
                    form.YY           = marea.ExteriorRing.Vertices[0].Y;
                    if (form.ShowDialog() == DialogResult.OK)
                    {
                        marea.ExteriorRing.Vertices.Add(WorldPos);
                        marea.ExteriorRing.Vertices.Add(WorldPos);
                        _R = (float)form.R;
                        if (AfterDefineArea != null)
                        {
                            AfterDefineArea(SelectionType, marea, _R);
                        }
                    }
                    _DrawEnd     = true;
                    this.Visible = false;
                    return;
                }
                //如果是测量长度
                else if (MainMapImage.ActiveTool == MapImage.Tools.MeasureLength)
                {
                    //添加地图坐标
                    mline.Vertices.Add(WorldPos);
                    //如果是第一次添加,那么需要追加一个点,以便在鼠标移动的时候更改这个点
                    if (mline.Vertices.Count < 2)
                    {
                        mline.Vertices.Add(new EasyMap.Geometries.Point(WorldPos.X, WorldPos.Y));
                    }
                }
                //如果是测量面积
                else if (MainMapImage.ActiveTool == MapImage.Tools.MeasureArea ||
                         MainMapImage.ActiveTool == MapImage.Tools.DefineArea ||
                         MainMapImage.ActiveTool == MapImage.Tools.SelectPoint ||
                         MainMapImage.ActiveTool == MapImage.Tools.ZoomArea ||
                         SelectionType == SELECTION_TYPE.POLYGON)
                {
                    if (MainMapImage.ActiveTool == MapImage.Tools.ZoomArea &&
                        marea.ExteriorRing.Vertices.Count == 2)
                    {
                        this.Visible = false;
                        if (AfterDefineArea != null)
                        {
                            AfterDefineArea(SelectionType, marea, _R);
                        }
                        return;
                    }
                    //添加地图坐标
                    marea.ExteriorRing.Vertices.Add(WorldPos);
                    //如果是第一次添加,那么需要追加一个点,以便在鼠标移动的时候更改这个点
                    if (marea.ExteriorRing.Vertices.Count < 2)
                    {
                        marea.ExteriorRing.Vertices.Add(new EasyMap.Geometries.Point(WorldPos.X, WorldPos.Y));
                    }
                }
            }
        }