⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form_main.cs

📁 C#+arcengine的一个适量数据编辑系统
💻 CS
📖 第 1 页 / 共 5 页
字号:
		}

//************************************     地图编辑相关方法与函数  ***********************************************
		private bool InEdit()
		{
			// 检查当前地图是否具备编辑条件
			if (m_CurrentLayer == null) return false;
			IFeatureLayer pFeatureLayer = (IFeatureLayer)m_CurrentLayer;
			if (pFeatureLayer.FeatureClass == null) return false;
			IDataset pDataset = (IDataset)pFeatureLayer.FeatureClass;
			if (pDataset == null) return false;
			IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;
			if (pWorkspaceEdit.IsBeingEdited()) return true;
			return false;
		}

		private void StartEditing()                                                                          //开始编辑
		{
			if (m_CurrentLayer == null) return;                                      //检查选择的当前图层
			if ( (IGeoFeatureLayer)m_CurrentLayer == null) return;
			IFeatureLayer m_FeatureLayer = (IFeatureLayer)m_CurrentLayer;
			IDataset m_Dataset = (IDataset)m_FeatureLayer.FeatureClass;
			if (m_Dataset== null) return;

			switch(comboBox_EditTask.SelectedIndex)
			{
				case 0:
					m_bSketch=true;
					break;
				case 1:
					m_bModify=true;
					break;
			}

			IWorkspaceEdit m_WorkspaceEdit = (IWorkspaceEdit)m_Dataset.Workspace;    //声明编辑工作空间对象
			if (!m_WorkspaceEdit.IsBeingEdited())
			{
				m_WorkspaceEdit.StartEditing(true);                                  //启动编辑
				m_WorkspaceEdit.EnableUndoRedo();                                    //设置撤消与重做可用
			}

		}

		private int SaveEditing()                                                                           //保存编辑
		{
			//先停止编辑保存
			if (m_CurrentLayer == null) return 0;
			IFeatureLayer m_FeatureLayer = (IFeatureLayer)m_CurrentLayer;
			if (m_FeatureLayer.FeatureClass == null) return 0;
			IDataset m_Dataset = (IDataset)m_FeatureLayer.FeatureClass;
			if ( m_Dataset == null) return 0;
       
			IWorkspaceEdit m_WorkspaceEdit = (IWorkspaceEdit)m_Dataset.Workspace;
			if (m_WorkspaceEdit.IsBeingEdited())
			{
				bool bHasEdits = false;
				m_WorkspaceEdit.HasEdits(ref bHasEdits);
				bool bSave = false;

				if (bHasEdits)
				{
					DialogResult result;
					result = MessageBox.Show(this, "需要保存当前的编辑吗?", "保存",
						                     MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
					if (DialogResult.Yes == result)
						bSave = true;
					else if (DialogResult.Cancel == result)
						return 0;
				}
				m_WorkspaceEdit.StopEditing(bSave);
			}
			//再启动编辑
			if (!m_WorkspaceEdit.IsBeingEdited())
			{
				m_WorkspaceEdit.StartEditing(true);                                  //启动编辑
				m_WorkspaceEdit.EnableUndoRedo();                                    //设置撤消与重做可用
			}
			return 1;
		}

		private int StopEditing()                                                                        //停止编辑操作
		{
			// 
			if (m_CurrentLayer == null) return 0;
			IFeatureLayer m_FeatureLayer = (IFeatureLayer)m_CurrentLayer;
			if (m_FeatureLayer.FeatureClass == null) return 0;
			IDataset m_Dataset = (IDataset)m_FeatureLayer.FeatureClass;
			if ( m_Dataset == null) return 0;
       
			// 
			IWorkspaceEdit m_WorkspaceEdit = (IWorkspaceEdit)m_Dataset.Workspace;

			if (m_WorkspaceEdit.IsBeingEdited())
			{
				bool bHasEdits = false;
				m_WorkspaceEdit.HasEdits(ref bHasEdits);
				bool bSave = false;

				if (bHasEdits)
				{
					DialogResult result;
					result = MessageBox.Show(this, "需要保存编辑吗?", "停止编辑", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
					if (DialogResult.Yes == result)
						bSave = true;
					else if (DialogResult.Cancel == result)
						return 0;
				}
				m_WorkspaceEdit.StopEditing(bSave);
			}
   
			m_bSketch=false;
			m_bModify=false;
			IActiveView m_ActiveView = (IActiveView)m_Map;
			m_ActiveView.Refresh();
			return 1;
		}

		private void CopySelectedFeatures()                                                               //复制要素
		{
			if (m_CurrentLayer == null) return;

			//检查当前是否在编辑状态
			if(m_bModify == true)
			{
				// 检查是否有要素被选中,没有则MessageBox提醒
				IFeatureSelection pFeatSel = (IFeatureSelection)m_CurrentLayer;
				ISelectionSet pSelectionSet = pFeatSel.SelectionSet;
				if (pSelectionSet.Count == 0)
				{
					MessageBox.Show("在 '" + m_CurrentLayer.Name + "' 图层没有要素被选中!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
					return;
				}
				IEnumFeature pSelected = (IEnumFeature)m_Map.FeatureSelection;             //获取选中要素
				IFeature pFeature = pSelected.Next();
				m_GeoCollecton= new GeometryBagClass();
				IGeometry pGeom;
				while (pFeature != null)
				{
					pGeom = pFeature.Shape;
					object Missing = Type.Missing;
					m_GeoCollecton.AddGeometry(pGeom,ref Missing,ref Missing);     //GeoCollecton.AddGeometry方法
					pFeature = pSelected.Next();
				}			
				m_bCopy=true;
			}
			else
			{
				MessageBox.Show("当前不在修改状态!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
				return;
			}
		}

		private void PasteSelectedFeatures()                                                               //粘贴要素
		{
			if (m_CurrentLayer == null) return;
			IFeatureLayer m_FeatureLayer = (IFeatureLayer)m_CurrentLayer;
      
			//检查当前是否在编辑状态
			if(m_bModify == true)
			{
				if (m_bCopy == false)// 检查是否有要素被复制了
				{
					MessageBox.Show("在 '" + m_CurrentLayer.Name + "' 图层没有要素被复制!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
					return;
				}
				for(int i = 0;i<=m_GeoCollecton.GeometryCount - 1;i++)
				{
					if(m_GeoCollecton.get_Geometry(i).GeometryType ==  m_FeatureLayer.FeatureClass.ShapeType)
					{
						CreateFeature(m_GeoCollecton.get_Geometry(i));              //CreateFeature方法调用
					}
				}
			}
			else
			{
				MessageBox.Show("当前不在修改状态!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
				return;
			}
		}

		private void CreateFeature(IGeometry m_Geometry)                                  //粘贴要素<---创建要素方法
		{    
			if (m_Geometry == null) return;
			if (m_CurrentLayer == null) return;
      
			IWorkspaceEdit m_WorkspaceEdit = GetWorkspaceEdit();             //获取编辑空间
			IFeatureLayer m_FeatureLayer = (IFeatureLayer)m_CurrentLayer;
			IFeatureClass m_FeatureClass = m_FeatureLayer.FeatureClass;

			m_WorkspaceEdit.StartEditOperation();                            //使用WorkspaceEdit接口新建要素
			IFeature m_Feature = m_FeatureClass.CreateFeature();
			m_Feature.Shape = m_Geometry;
			m_Feature.Store();
			m_WorkspaceEdit.StopEditOperation();

			// 以一定缓冲范围刷新视图
			IActiveView m_ActiveView = (IActiveView)m_Map;
			if (m_Geometry.GeometryType == esriGeometryType.esriGeometryPoint)
			{
				double Length;
				Length = ConvertPixelsToMapUnits(m_ActiveView, 30);             //屏幕像素转换成地图单位      
				ITopologicalOperator m_Topo = (ITopologicalOperator)m_Geometry;
				IGeometry m_Buffer = m_Topo.Buffer(Length);
				m_ActiveView.PartialRefresh((esriViewDrawPhase)(esriDrawPhase.esriDPGeography | 
					esriDrawPhase.esriDPSelection), m_CurrentLayer, m_Buffer.Envelope);
			}
			else
				m_ActiveView.PartialRefresh((esriViewDrawPhase)(esriDrawPhase.esriDPGeography | 
					esriDrawPhase.esriDPSelection), m_CurrentLayer, m_Geometry.Envelope);
		}

		private IWorkspaceEdit GetWorkspaceEdit()                                          //获取当前编辑空间
		{
			if (m_CurrentLayer == null) return null;
      
			IFeatureLayer m_FeatureLayer = (IFeatureLayer)m_CurrentLayer;
			IFeatureClass m_FeatureClass = m_FeatureLayer.FeatureClass;
			IDataset m_Dataset = (IDataset)m_FeatureClass;
			if ( m_Dataset == null) return null;
			return (IWorkspaceEdit)m_Dataset.Workspace;
		}

		private void DeleteSelectedFeatures()                                                              //删除要素
		{
			if (m_CurrentLayer == null) return;
              
			// 先检查当前是否有要素被选中
			IFeatureCursor pFeatureCursor = GetSelectedFeatures();       //获取被选中要素
			if (pFeatureCursor == null) return;

			m_Map.ClearSelection();
			

			// 要素删除方法
			IWorkspaceEdit pWorkspaceEdit = GetWorkspaceEdit();
			pWorkspaceEdit.StartEditOperation();
			IFeature pFeature = pFeatureCursor.NextFeature();
			while (pFeature != null)
			{
				pFeature.Delete();
				pFeature = pFeatureCursor.NextFeature();
			}
			pWorkspaceEdit.StopEditOperation();
      
			IActiveView pActiveView = (IActiveView)m_Map;
			pActiveView.Refresh();
		}

		private IFeatureCursor GetSelectedFeatures()                              //删除要素<------获取被选中的要素
		{
			if (m_CurrentLayer == null) return null;
      
			// 检查是否有要素被选中,没有则MessageBox提醒
			IFeatureSelection pFeatSel = (IFeatureSelection)m_CurrentLayer;
			ISelectionSet pSelectionSet = pFeatSel.SelectionSet;
			if (pSelectionSet.Count == 0)
			{
				MessageBox.Show("在 '" + m_CurrentLayer.Name + "' 图层没有要素被选中!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
				return null;
			}
      
			// 有则返回要素游标
			ICursor pCursor;
			pSelectionSet.Search(null, false, out pCursor);
			return (IFeatureCursor)pCursor;
		}

		private double ConvertPixelsToMapUnits(IActiveView pActiveView , double pixelUnits)
		{
			// 依据当前视图,将屏幕像素转换成地图单位
			IPoint Point1 = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.UpperLeft;
			IPoint Point2 = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.UpperRight;
			int x1, x2, y1, y2;
			pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(Point1, out x1, out y1);
			pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(Point2, out x2, out y2);
			double pixelExtent = x2 - x1;
			double realWorldDisplayExtent = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.Width;
			double sizeOfOnePixel = realWorldDisplayExtent / pixelExtent;
			return pixelUnits * sizeOfOnePixel;
		}



		

		

		



















	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -