在地图上移动点,线,面的方法

/// <summary>
        /// 开始编辑
        /// </summary>
        /// <param name="bWithUndoRedo">是否编辑</param>
        /// <param name="m_SelectedLayer">图层名</param>
        public void StartEditing(bool bWithUndoRedo, ILayer m_SelectedLayer)
        {
            if (m_SelectedLayer == null) return;
            IFeatureLayer featureLayer = m_SelectedLayer as IFeatureLayer;
            if (featureLayer == null) return;
            IFeatureClass featureClass = featureLayer.FeatureClass;
            if (featureClass == null) return;
            IDataset dataset = featureClass as IDataset;
            IWorkspaceEdit workspaceEdit = dataset.Workspace as IWorkspaceEdit;
            try
            {
                workspaceEdit.StartEditing(bWithUndoRedo);
                m_IsEdited = true;
            }
            catch
            {
                return;
            }
        }
          / // <summary>
        /// 移动要素
        /// </summary>
        /// <param name="StartPoint">起始点</param>
        /// <param name="EndPoint">结束点</param>
        /// <param name="MoveGeometry">要移动的几何图形</param>
        /// <param name="IMapctrl">控件接口</param>
        /// <returns></returns>
        public IGeometry FeatureMoveEdit(IPoint StartPoint,IPoint EndPoint,IGeometry MoveGeometry, IMapControl3 IMapctrl)
        {
            //移动后的IGeometry
            IGeometry ToGeometry=null;
            switch (MoveGeometry.GeometryType)
            {
                    //点要素
                case esriGeometryType.esriGeometryPoint:
                    {
                        IMovePointFeedback Point_Feedback=new MovePointFeedbackClass();
                        Point_Feedback.Display = IMapctrl.ActiveView.ScreenDisplay;
                        Point_Feedback.Start(MoveGeometry as IPoint, StartPoint);
                        double dx = EndPoint.X - StartPoint.X;
                        double dy = EndPoint.Y - StartPoint.Y;
                        IPoint NewPoint = new PointClass();
                        IPoint OldPoint = MoveGeometry as IPoint;
                        NewPoint.X = OldPoint.X + dx;
                        NewPoint.Y = OldPoint.Y + dy;
                        Point_Feedback.MoveTo(NewPoint);
                        ToGeometry = Point_Feedback.Stop() as IGeometry;                       
                        break;
                    }
                    //线要素
                case esriGeometryType.esriGeometryPolyline:
                    {
                        IMoveLineFeedback Line_Feedback = new MoveLineFeedbackClass();
                        Line_Feedback.Display = IMapctrl.ActiveView.ScreenDisplay;
                        Line_Feedback.Start(MoveGeometry as IPolyline, StartPoint);
                        Line_Feedback.MoveTo(EndPoint);
                        ToGeometry = Line_Feedback.Stop() as IGeometry;
                        break;
                    }
                    //面要素
                case esriGeometryType.esriGeometryPolygon:
                    {
                        IMovePolygonFeedback Polygon_Feedback = new MovePolygonFeedbackClass();
                        Polygon_Feedback.Display = IMapctrl.ActiveView.ScreenDisplay;
                        Polygon_Feedback.Start(MoveGeometry as IPolygon, StartPoint);
                        Polygon_Feedback.MoveTo(EndPoint);
                        ToGeometry = Polygon_Feedback.Stop() as IGeometry;
                        break;
                    }
            }
            return ToGeometry;
        }
         /// <summary>
        /// 结束编辑
        /// </summary>
        /// <param name="bSave">是够保存编辑</param>
        /// <param name="m_SelectedLayer">编辑图层</param>
        public void StopEditing(bool bSave, ILayer m_SelectedLayer)
        {
            if (m_IsEdited)
            {
                m_IsEdited = false;
                if (m_SelectedLayer == null)
                {
                    return;
                }
                IFeatureLayer featureLayer = m_SelectedLayer as IFeatureLayer;
                if (featureLayer == null)
                {
                    return;
                }
                IFeatureClass featureClass = featureLayer.FeatureClass;
                if (featureClass == null)
                {
                    return;
                }
                IDataset dataset = featureClass as IDataset;
                IWorkspaceEdit workspaceEdit = dataset.Workspace as IWorkspaceEdit;
                //判断是否在编辑状态
                if (workspaceEdit.IsBeingEdited())
                {
                    try
                    {
                        workspaceEdit.StopEditing(bSave);
                    }
                    catch
                    {
                        workspaceEdit.AbortEditOperation();
                        return;
                    }
                }
            }
        }

posted @ 2011-09-26 23:20  iskyoole  阅读(501)  评论(0)    收藏  举报