1、AE 加载Shapefile、栅格、CAD、PersonGDB、SDE数据 ArcEngine加载图层的五个步骤 1.创建一个类工厂 2.使用类工厂创建一个要使用的工作区 3.使用工作区打开并得到图层的dataset 4.把dataset装入到新建的图层实例 5.把图层加载到MapControl控件 1. 加载Shapefile数据 IWorkspaceFactory pWorkspaceFactory; IFeatureWorkspace pFeatureWorkspace; IFeature
2、Layer pFeatureLayer; //获取当前路径和文件名 OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "Shape(*.shp)|*.shp|All Files(*.*)|*.*"; dlg.Title = "Open Shapefile data"; dlg.ShowDialog(); string strFullPath = dlg.FileN
3、ame; if (strFullPath == "") return; int Index = strFullPath.LastIndexOf("//"); string filePath = strFullPath.Substring(0, Index); string fileName = strFullPath.Substring(Index + 1); //打开工作空间并添加shp文件 pWorkspaceFactory = n
4、ew ShapefileWorkspaceFactoryClass(); pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0); pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(fileName); p
5、FeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName; axMapControl1.Map.AddLayer(pFeatureLayer); axMapControl1.ActiveView.Refresh(); 2.加载栅格数据 IWorkspaceFactory pWorkspaceFactory; IRasterWorkspace pRasterWorkspace; OpenFileDia
6、log dlg = new OpenFileDialog(); dlg.Filter = "Layer File(*.lyr)|*.jpg;*.bmp;*.tiff"; dlg.Title = "Open Raster Data File"; dlg.ShowDialog(); //获取当前路径和文件名 string strFullPath = dlg.FileName; if (strFullPath == "") return
7、 int Index = strFullPath.LastIndexOf("//"); string fileName = strFullPath.Substring(Index + 1); string filePath = strFullPath.Substring(0, Index); pWorkspaceFactory = new RasterWorkspaceFactoryClass(); pRasterWorkspace = (IRasterWor
8、kspace)pWorkspaceFactory.OpenFromFile(filePath, 0); IRasterDataset pRasterDataset = (IRasterDataset)pRasterWorkspace.OpenRasterDataset(fileName); IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromDataset(pRasterDataset); ax
9、MapControl1.Map.AddLayer(pRasterLayer); axMapControl1.ActiveView.Refresh(); 3.加载CAD数据 1 IWorkspaceFactory pWorkspaceFactory; 2 IFeatureWorkspace pFeatureWorkspace; 3 IFeatureLayer pFeatureLayer; 4 IFeatureDataset pFeatureDataset;
10、5 //获取当前路径和文件名 6 OpenFileDialog dlg = new OpenFileDialog(); 7 dlg.Filter = "CAD(*.dwg)|*.dwg|All Files(*.*)|*.*"; 8 dlg.Title = "Open CAD Data file"; 9 dlg.ShowDialog(); 10 string strFullPath = dlg.FileName; 11 if
11、 (strFullPath == "") return; 12 int Index = strFullPath.LastIndexOf("//"); 13 string filePath = strFullPath.Substring(0, Index); 14 string fileName = strFullPath.Substring(Index + 1); 15 //打开CAD数据集 16 pWorkspaceFactory = new CadWorkspaceFac
12、toryClass(); 17 pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0); 18 //打开一个要素集 19 pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(fileName); 20 //IFeaturClassContainer可以管理IFeatureDataset中的每个要素类 21
13、 IFeatureClassContainer pFeatClassContainer = (IFeatureClassContainer)pFeatureDataset; 22 //对CAD文件中的要素进行遍历处理 23 for (int i = 0; i < pFeatClassContainer.ClassCount - 1; i++) 24 { 25 IFeatureClass pFeatClass = pFeatClassContainer.get_Class(i); 26
14、 if (pFeatClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation) 27 //如果是注记,则添加注记层 28 pFeatureLayer = new CadAnnotationLayerClass(); 29 else//如果是点、线、面,则添加要素层 30 { 31 pFeatureLayer = new F
15、eatureLayerClass(); 32 pFeatureLayer.Name = pFeatClass.AliasName; 33 pFeatureLayer.FeatureClass = pFeatClass; 34 axMapControl1.Map.AddLayer(pFeatureLayer); 35 axMapControl1.ActiveView.Refresh(); 36 } 37
16、 } 4.加载PersonGeodatabase数据 1 IWorkspaceFactory pAccessWorkspaceFactory; 2 IFeatureWorkspace pFeatureWorkspace; 3 IFeatureLayer pFeatureLayer; 4 IFeatureDataset pFeatureDataset; 5 6 //获取当前路径和文件名 7 OpenFileDialo
17、g dlg = new OpenFileDialog(); 8 dlg.Filter = "Personal Geodatabase(*.mdb)|*.mdb|All Files(*.*)|*.*"; 9 dlg.Title = "Open PersonGeodatabase file"; 10 dlg.ShowDialog(); 11 string strFullPath = dlg.FileName; 12 if (strFullPath == "") return;
18、 13 14 //打开personGeodatabase,并添加图层 15 pAccessWorkspaceFactory = new AccessWorkspaceFactoryClass(); 16 //打开工作空间并遍历数据集 17 IWorkspace pWorkspace = pAccessWorkspaceFactory.OpenFromFile(strFullPath, 0); 18 IEnumDataset pEnumDataset = pWorkspace
19、get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny); 19 pEnumDataset.Reset(); 20 IDataset pDataset = pEnumDataset.Next(); 21 //如果数据集是IFeatureDataset,则遍历它下面的子类 22 if (pDataset is IFeatureDataset) 23 { 24 pFeature
20、Workspace = (IFeatureWorkspace)pAccessWorkspaceFactory.OpenFromFile(strFullPath, 0); 25 pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(pDataset.Name); 26 IEnumDataset pEnumDataset1 = pFeatureDataset.Subsets; 27 pEnumDataset1.Reset(); 28
21、 IDataset pDataset1 = pEnumDataset1.Next(); 29 //如果子类是FeatureClass,则添加到axMapControl1中 30 if (pDataset1 is IFeatureClass) 31 { 32 pFeatureLayer = new FeatureLayerClass(); 33 pFeatureLayer.FeatureClass = pF
22、eatureWorkspace.OpenFeatureClass(pDataset1.Name); 34 pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName; 35 axMapControl1.Map.AddLayer(pFeatureLayer); 36 axMapControl1.ActiveView.Refresh(); 37 } 38 els
23、e 39 { 40 MessageBox.Show("No FeatureLayer!"); 41 } 42 } 43 else 44 { 45 pFeatureWorkspace = (IFeatureWorkspace)pWorkspace; 46 pFeatureLayer = new FeatureLayerClass(); 47
24、 pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass("图层名"); 48 pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName; 49 axMapControl1.Map.AddLayer(pFeatureLayer); 50 axMapControl1.ActiveView.Refresh(); 51 } 5.加载SDE数
25、据库数据 1 public ESRI.ArcGIS.Geodatabase.IWorkspace arcSDEWorkspaceOpen(String server, String instance, String user, String password, String database, String version) 2 { 3 try 4 { 5 // Create and populate the property set 6
26、ESRI.ArcGIS.esriSystem.IPropertySet propertySet = new ESRI.ArcGIS.esriSystem.PropertySetClass(); 7 propertySet.SetProperty("SERVER", server); 8 propertySet.SetProperty("INSTANCE", instance); 9 propertySet.SetProperty("DATABASE", database); 10
27、 propertySet.SetProperty("USER", user); 11 propertySet.SetProperty("PASSWORD", password); 12 propertySet.SetProperty("VERSION", version); 13 14 ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 workspaceFactory; 15 workspaceFactory =
28、 (ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2)new SdeWorkspaceFactoryClass(); 16 return workspaceFactory.Open(propertySet, 0); 17 } 18 catch (Exception e) 19 { 20 throw new Exception(String.Format("arcSDEWorkspaceOpen: {0}", e.Messag
29、e), e); 21 } 22 } 23 24 IWorkspace pWorkspace = arcSDEWorkspaceOpen("计算机名", "5151", "数据库用户", "密码", "", "sde.DEFAULT"); 25 26 IFeatureWorkspace pFeattureWS = (IFeatureWorkspace)pWorkspace; 27 IFeatureClass pFeatureClass = pFeattureWS.OpenFeatureClass("图层名"); 28 IFeatureLayer pFeatureLayer = new FeatureLayerClass(); 29 pFeatureLayer.FeatureClass = pFeatureClass; 30 31 axMapControl1.AddLayer(pFeatureLayer); 32 axMapControl1.Refresh();






