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

📄 form_main.cs

📁 C#+arcengine的一个适量数据编辑系统
💻 CS
📖 第 1 页 / 共 5 页
字号:
					for(int i=0;i<FilePath.Length;i++) 
					{ 
						ShapeFilePath[i]=System.IO.Path.GetFileName(FilePath[i]); 
					} 
					IWorkspaceFactory m_WorkspaceFactory=new ShapefileWorkspaceFactoryClass(); 
					IWorkspace m_Workspace=m_WorkspaceFactory.OpenFromFile(WorkSpacePath,0); 
					IFeatureWorkspace m_FeatureWorkspace=m_Workspace as IFeatureWorkspace; 
					for(int i=0;i<ShapeFilePath.Length;i++) 
					{ 
						IFeatureClass m_FeatureClass=m_FeatureWorkspace.OpenFeatureClass(ShapeFilePath[i]); 
						IDataset m_Dataset=m_FeatureClass as IDataset; 
						IFeatureLayer m_FeatureLayer=new FeatureLayerClass(); 
						m_FeatureLayer.FeatureClass=m_FeatureClass; 
						m_FeatureLayer.Name=m_Dataset.Name; 
						ILayer m_Layer=m_FeatureLayer as ILayer; 
						this.MainMap.Map.AddLayer(m_Layer); 
					}
					MainMap.ActiveView.Extent=MainMap.FullExtent;
					MainMap.ActiveView.Refresh();
					MainMap.MousePointer = esriControlsMousePointer.esriPointerDefault;    //数据加载完毕,鼠标恢复
					return 1;
				}
			}
			return 0;
		}

//************************************          SDE连接菜单事件       ***********************************************

		private void menuItem_SDEConect_Click(object sender, System.EventArgs e)         //SDE连接菜单
		{
			//SDE连接窗体
			Cstest1.WindowsForm.Form_SDE Form_SDE=new Cstest1.WindowsForm.Form_SDE(this.MainMap);       
			Form_SDE.FormBorderStyle=FormBorderStyle.Fixed3D;
			Form_SDE.MaximizeBox=false;
			Form_SDE.MinimizeBox=false;
			Form_SDE.ShowDialog(this);;		
		}

//************************************          数据导出              ***********************************************
		private void menuItem_ExportSelectionSet_Click(object sender, System.EventArgs e) //数据导出菜单->要素选择集
		{
			//导出当前选中的要素
			if(MainMap.LayerCount==0)
			{
				System.Windows.Forms.MessageBox.Show("请先加载数据!");
				return;
			}
			int Selected=0;
			for(int i=0;i<=MainMap.Map.LayerCount - 1;i++)
			{
				ILayer m_Layer=MainMap.Map.get_Layer(i);
				IFeatureLayer m_FeatureLayer=(IFeatureLayer)MainMap.Map.get_Layer(i);
				IFeatureSelection m_FeatSel = (IFeatureSelection)m_FeatureLayer;
				ISelectionSet m_SelectionSet = m_FeatSel.SelectionSet;
				
				if(m_SelectionSet.Count == 0) continue;
				Selected=1;
				CreatShapeFile(m_FeatureLayer);                //创建shapefile
			}
			if(Selected == 0) MessageBox.Show("当前地图没有要素被选中!");
			
		}

		private void menuItem_ExportView_Click(object sender, System.EventArgs e)  //数据导出菜单->视图范围要素
		{
			//导出当前视图范围内的要素
			if(MainMap.LayerCount==0)
			{
				System.Windows.Forms.MessageBox.Show("请先加载数据!");
				return;
			}
			//以当前视图范围Extend来选择要素
			MainMap.Map.SelectByShape(MainMap.Extent.Envelope,null,false);
			int Selected=0;
			for(int i=0;i<=MainMap.Map.LayerCount - 1;i++)
			{
				ILayer m_Layer=MainMap.Map.get_Layer(i);
				IFeatureLayer m_FeatureLayer=(IFeatureLayer)MainMap.Map.get_Layer(i);
				IFeatureSelection m_FeatSel = (IFeatureSelection)m_FeatureLayer;
				ISelectionSet m_SelectionSet = m_FeatSel.SelectionSet;
				
				if(m_SelectionSet.Count == 0) continue;
				Selected=1;
				CreatShapeFile(m_FeatureLayer);                //创建shapefile
			}
			if(Selected == 0) MessageBox.Show("当前视图范围内没有要素!");

		}

		private void CreatShapeFile(IFeatureLayer pFeatureLayer)     //新建文件,保存选中要素
		{
			SaveFileDialog dlg=new SaveFileDialog(); 
			dlg.Filter="Shapefiles文件(*.shp)|*.shp"; 
			dlg.DefaultExt = "*.shp";
			dlg.Title="' " + pFeatureLayer.Name + " '" +"图层要素导出"; 
			dlg.RestoreDirectory = true;

			string FilePath;
			
			if(dlg.ShowDialog()==DialogResult.OK) 
			{   
				FilePath=dlg.FileName;
				if(FilePath.Length > 0) 
				{ 
					string WorkSpacePath=System.IO.Path.GetDirectoryName(FilePath);//工作空间路径
					string FileName=System.IO.Path.GetFileName(FilePath);//shapefile文件名
					FileName=FileName.Substring(0,FileName.Length -4);
					dlg.CheckFileExists = true;

					//按保存路径打开工作空间
					IWorkspaceFactory m_WorkspaceFactory=new ShapefileWorkspaceFactoryClass(); 
					IWorkspace m_Workspace=m_WorkspaceFactory.OpenFromFile(WorkSpacePath,0); 
					IFeatureWorkspace m_FeatureWorkspace=m_Workspace as IFeatureWorkspace;
					
					IFields m_Fields=new FieldsClass();
					IFieldsEdit m_FieldsEdit=(IFieldsEdit)m_Fields;

					//生成shape字段:设置Geometry定义和空间参考系
					IField m_Field=new FieldClass();
					IFieldEdit m_FieldEdit=(IFieldEdit)m_Field;
					m_FieldEdit.Name_2="Shape";
					m_FieldEdit.Type_2=ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeGeometry;
					
					IGeometryDef m_GeomDef=new GeometryDefClass();
					IGeometryDefEdit m_GeomDefEdit=(IGeometryDefEdit)m_GeomDef;

					switch(pFeatureLayer.FeatureClass.ShapeType)  //Geometry定义
					{
						case esriGeometryType.esriGeometryPoint:
							m_GeomDefEdit.GeometryType_2=esriGeometryType.esriGeometryPoint; 
							break;
						case esriGeometryType.esriGeometryPolyline:
							m_GeomDefEdit.GeometryType_2=esriGeometryType.esriGeometryPolyline;
							break;
						case esriGeometryType.esriGeometryPolygon:
							m_GeomDefEdit.GeometryType_2=esriGeometryType.esriGeometryPolygon;
							break;
					}
					m_GeomDefEdit.SpatialReference_2=pFeatureLayer.FeatureClass.Fields.get_Field(pFeatureLayer.FeatureClass.Fields.FindField(pFeatureLayer.FeatureClass.ShapeFieldName)).GeometryDef.SpatialReference;//空间参考系

					m_FieldEdit.GeometryDef_2=m_GeomDef;
                    m_FieldsEdit.AddField(m_Field);

					//其余字段生成
					for(int FieldIndex=2;FieldIndex<=pFeatureLayer.FeatureClass.Fields.FieldCount -1;FieldIndex++)
					{
						m_Field=new FieldClass();
						m_FieldEdit=(IFieldEdit)m_Field;
						m_FieldEdit.Type_2=pFeatureLayer.FeatureClass.Fields.get_Field(FieldIndex).Type;
						m_FieldEdit.Name_2=pFeatureLayer.FeatureClass.Fields.get_Field(FieldIndex).Name;
                        m_FieldEdit.Length_2=pFeatureLayer.FeatureClass.Fields.get_Field(FieldIndex).Length;
						m_FieldEdit.Scale_2=pFeatureLayer.FeatureClass.Fields.get_Field(FieldIndex).Scale;
						m_FieldEdit.Precision_2=pFeatureLayer.FeatureClass.Fields.get_Field(FieldIndex).Precision;
					    m_FieldsEdit.AddField(m_Field);
					}

					//生成要素类
					IFeatureClass m_NewFeatureClass;
					m_NewFeatureClass=m_FeatureWorkspace.CreateFeatureClass(FileName,m_Fields,null,null,
						     ESRI.ArcGIS.Geodatabase.esriFeatureType.esriFTSimple,"Shape","");	
					
					//将选中要素复制到新shapefile文件中
					IFeatureSelection m_FeatureSelection = (IFeatureSelection)pFeatureLayer;
					ISelectionSet m_SelectionSet = m_FeatureSelection.SelectionSet;

					ICursor m_Cursor;
					m_SelectionSet.Search(null, false, out m_Cursor);
					IFeatureCursor m_FeatureCursor;
					m_FeatureCursor = (IFeatureCursor)m_Cursor;

					IFeature m_Feature;
					m_Feature=m_FeatureCursor.NextFeature();
                    
					//开始编辑
					IDataset m_Dataset = (IDataset)pFeatureLayer.FeatureClass;
					IWorkspaceEdit m_WorkspaceEdit = (IWorkspaceEdit)m_Dataset.Workspace; 
					IFeature m_NewFeature;
					if (!m_WorkspaceEdit.IsBeingEdited())
					{
						m_WorkspaceEdit.StartEditing(true);
					}
					//新图层的游标变量:
					IFeatureCursor m_NewFeatureCursor;
					m_NewFeatureCursor=m_NewFeatureClass.Update(null,false);

					while (m_Feature != null)
					{
						//复制图形
						m_NewFeature=m_NewFeatureClass.CreateFeature();
						m_NewFeature.Shape=m_Feature.Shape;
						m_NewFeature.Store();

						//复制属性表
						for(int Index = 2;Index <= m_Feature.Fields.FieldCount -1;Index++)
							m_NewFeature.set_Value(Index,m_Feature.get_Value(Index));

						m_NewFeatureCursor.UpdateFeature(m_NewFeature);

						m_Feature=m_FeatureCursor.NextFeature();
					}
					//停止编辑
					m_WorkspaceEdit.StopEditOperation();
					m_WorkspaceEdit.StopEditing(true);
				}
			}
		}

//***********************************         移除所有图层菜单事件           ****************************************
		private void menuItem_ClearLayers_Click(object sender, System.EventArgs e)      //移除所有图层
		{
			if (StopEditing() == 1)        //如果在编辑状态则停止编辑
			{
				MainMap.Map.ClearSelection();
				MainMap.ActiveView.Refresh();
				comboBox_EditTask.Enabled=false;
				comboBox_Target.Enabled=false;
			} 
			MainMap.Map.ClearLayers();
			MainMap.ActiveView.Extent=MainMap.ActiveView.FullExtent;
			MainMap.ActiveView.Refresh();
			MainMap.MousePointer = esriControlsMousePointer.esriPointerDefault;

			toolBarButton_ZoomIn.Pushed=false;
			toolBarButton_ZoomOut.Pushed=false;
			toolBarButton_Pan.Pushed=false;
			toolBarButton_Select.Pushed=false;
			comboBox_MapScale.Enabled=false;
			menuItem_StartEdit.Enabled=false;
			menuItem_ClearLayers.Enabled=false;
		}

//***********************************         退出程序菜单事件         *************************************************
		private void menuItem_Quit_Click(object sender, System.EventArgs e)            //退出程序
		{
			StopEditing();  //如果在编辑状态则停止编辑
			this.Close();
		}

//***********************************         属性查询菜单事件         *************************************************
		private void menuItem1_Atrribute_Click(object sender, System.EventArgs e)     //属性查询
		{
			if(MainMap.LayerCount==0)
			{
				System.Windows.Forms.MessageBox.Show("请先加载数据!");
				return;
			}
			Cstest1.WindowsForm.Form_Query FormQuery=new Cstest1.WindowsForm.Form_Query(this.MainMap);
			FormQuery.FormBorderStyle=FormBorderStyle.Fixed3D;
			FormQuery.MaximizeBox=false;
			FormQuery.MinimizeBox=false;
			FormQuery.Show();	
		}

//***********************************          编辑器菜单事件          *************************************************
		private void menuItem_StartEdit_Click(object sender, System.EventArgs e)  //开始编辑菜单
		{
			m_Map=MainMap.Map;
			comboBox_EditTask.Enabled=true;                        //编辑任务comboBox可用
			comboBox_Target.Enabled=true;                          //编辑图层comboBox可用
			comboBox_Target.Items.Clear();

			for(int i=0;i<=m_Map.LayerCount - 1;i++)           
			{
				comboBox_Target.Items.Add(m_Map.get_Layer(i).Name); //编辑图层comboBox添加各图层名
				comboBox_Target.SelectedIndex=0;
			}

			for(int i=0;i<=m_Map.LayerCount - 1;i++)
			{
				if(m_Map.get_Layer(i).Name==comboBox_Target.Text)     //默认设定最新添加的图层为可编辑图层
				{
					m_CurrentLayer = m_Map.get_Layer(i);
					break;
				}
			}
			comboBox_EditTask.SelectedIndex=0;                       //默认设定编辑任务为新建要素
			toolBarButton_Sketch.Pushed=true;
			StartEditing();

			toolBarButton_ZoomIn.Pushed=false;
			toolBarButton_ZoomOut.Pushed=false;
			toolBarButton_Pan.Pushed=false;
			toolBarButton_Select.Pushed=false;
			menuItem_StartEdit.Enabled=false;
			menuItem_SaveEdit.Enabled=true;
			menuItem_StopEdit.Enabled=true;
		}

		private void menuItem_SaveEdit_Click(object sender, System.EventArgs e)  //保存编辑菜单
		{
			if (SaveEditing() == 1)
			{
				MainMap.Map.ClearSelection();
				MainMap.ActiveView.Refresh();
				menuItem_SaveEdit.Enabled=false;
			}
		}

		private void menuItem_StopEdit_Click(object sender, System.EventArgs e) //停止编辑菜单
		{
			if (StopEditing() == 1)
			{
				MainMap.Map.ClearSelection();
				MainMap.ActiveView.Refresh();
				MainMap.MousePointer= esriControlsMousePointer.esriPointerDefault;
				toolBarButton_Sketch.Pushed=false;
				comboBox_EditTask.Enabled=false;
				comboBox_Target.Enabled=false;
				menuItem_StartEdit.Enabled=true;
				menuItem_SaveEdit.Enabled=false;
				menuItem_StopEdit.Enabled=false;
			}

⌨️ 快捷键说明

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