/// <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); }
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)); } } } }