📄 form_main.cs
字号:
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 + -