用ArcEngine的工具条添加图层要素

来源:互联网 发布:websphere mq java 编辑:程序博客网 时间:2024/06/05 12:01

 发现AE比起其它的组件GIS来要好用的多
但也有一些bt的地方
比如说AE没有提供图层编辑的工具条
但最近因为程序里要添加图元
必须得开发图层编辑的功能
于是去找了找资料
发现自带的帮助里有一个MapEditing示例
但是从AO的示例改造而来
需要从按钮写起
想想如果这样搞的话
倒不如直接用AO算了
一直想省点事
AE自带的工具条上做点文章
其实AE中也有一组相似的编辑按钮,是用于编辑Graphics
自然就有了一个想法:能不能先生成一个Graphic,然后将其加载进来
琢磨了几日,终于实现了
现在把代码拿出来和大家分享

  1. private void Form1_Load(object sender, System.EventArgs e)
  2. {
  3. //清空图层
  4. this.axMapControl1.Map.ClearLayers();
  5. //加载服务器SDE地图信息
  6. ESRI.ArcGIS.esriSystem.IpropertySet Proset = new ESRI.ArcGIS.esriSystem.PropertySetClass();
  7. //属性集
  8. ESRI.ArcGIS.Geodatabase.IWorkspaceFactory Fact;//工作空间仓库
  9. ESRI.ArcGIS.Geodatabase.IWorkspace Workspace;//工作空间
  10. Proset.SetProperty("Server","服务器名");//服务器名
  11. Proset.SetProperty("Instance","端口");//实例化端口
  12. Proset.SetProperty("user","用户名");//SDE用户名
  13. Proset.SetProperty("password","密码");//密码
  14. Proset.SetProperty("version","sde.DEFAULT");//连接版本
  15. Fact = new ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactoryClass();//实例化为SDE工作空间仓库
  16. Workspace = Fact.Open(Proset,Int32.Parse(this.Handle.ToString()));//填入属性集
  17. ESRI.ArcGIS.Geodatabase.IFeatureWorkspace FeatureWorkspace;
  18. FeatureWorkspace = Workspace as ESRI.ArcGIS.Geodatabase.IFeatureWorkspace;//传递给Feature工作空间
  19. ESRI.ArcGIS.Geodatabase.IFeatureClass FeatureClass;
  20. FeatureClass = FeatureWorkspace.OpenFeatureClass("SDE.BBBB");//填充所需Feature集合
  21. ESRI.ArcGIS.Carto.FeatureLayer FLayer = new ESRI.ArcGIS.Carto.FeatureLayerClass();
  22. FLayer.FeatureClass = FeatureClass;//将Feature加载到图层
  23. axMapControl1.Map.AddLayer(FLayer);//加载图层
  24. axMapControl1.Update();//更新空白区域
  25. axMapControl1.Refresh();//刷新地图视窗
  26. }
  27. private void Form1_Closed(object sender, System.EventArgs e)
  28. {
  29. ESRI.ArcGIS.esriSystem.IAoInitialize aoi = new ESRI.ArcGIS.esriSystem.AoInitializeClass();
  30. aoi.Shutdown();
  31. }
  32. private void button1_Click(object sender, System.EventArgs e)
  33. {
  34. IGraphicsContainerSelect GraphicsContainerSelect = (IGraphicsContainerSelect)axMapControl1.Map;
  35. if(GraphicsContainerSelect.ElementSelectionCount ==0)//判断是否选中图斑
  36. {
  37. MessageBox.Show("请选中欲导入图斑!");
  38. return;
  39. }
  40. IWorkspaceEdit WorkspaceEdit;
  41. IFeatureLayer FeatureLayer;
  42. IFeatureClass FeatureClass;
  43. IFeature Feature;
  44. IDataset Dataset;
  45. FeatureLayer = (IFeatureLayer)this.axMapControl1.get_Layer(0);//选中导入图层
  46. FeatureClass = FeatureLayer.FeatureClass;//该图层的feature集
  47. Dataset = (IDataset)FeatureClass;//该图层的数据集
  48. WorkspaceEdit = (IWorkspaceEdit)Dataset.Workspace;//关联到编辑空间
  49. WorkspaceEdit.StartEditing(true);//使之可编辑
  50. WorkspaceEdit.StartEditOperation();//开始编辑
  51. Feature = FeatureClass.CreateFeature();//创建空feature
  52. Feature.Shape = GraphicsContainerSelect.SelectedElement(0).Geometry;//仅导入最新选中图斑,即多选时只有一个可以导入
  53. Feature.Store();
  54. WorkspaceEdit.StopEditOperation();
  55. WorkspaceEdit.StopEditing(true);//结束编辑并保存
  56. IGraphicsContainer GraphicsContainer = (IGraphicsContainer)GraphicsContainerSelect; 
  57. GraphicsContainer.DeleteAllElements();//删除graphic图层
  58. axMapControl1.ActiveView.Refresh();//刷新当前视图
  59. MessageBox.Show("ok");
  60. }
原创粉丝点击