ArcEngine加载图层的五个步骤
1.创建一个类工厂
2.使用类工厂创建一个要使用的工作区
3.使用工作区打开并得到图层的dataset
4.把dataset装入到新建的图层实例
5.把图层加载到MapControl控件
ArcEngine 数据加载的几种类型
1.加载Shapefile数据
1 IWorkspaceFactory pWorkspaceFactory;
2 IFeatureWorkspace pFeatureWorkspace;
3 IFeatureLayer pFeatureLayer;
4
5 //获取当前路径和文件名
6 OpenFileDialog dlg = new OpenFileDialog();
7 dlg.Filter = "Shape(*.shp)|*.shp|All Files(*.*)|*.*";
8 dlg.Title = "Open Shapefile data";
9 dlg.ShowDialog();
10 string strFullPath = dlg.FileName;
11 if (strFullPath == "") return;
12 int Index = strFullPath.LastIndexOf("//");
13 string filePath = strFullPath.Substring(0, Index);
14 string fileName = strFullPath.Substring(Index + 1);
15
16 //打开工作空间并添加shp文件
17 pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
18
pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0);
19 pFeatureLayer = new FeatureLayerClass();
20
21 pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(fileName);
22 pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
23 axMapControl1.Map.AddLayer(pFeatureLayer);
24 axMapControl1.ActiveView.Refresh();
2 IFeatureWorkspace pFeatureWorkspace;
3 IFeatureLayer pFeatureLayer;
4
5 //获取当前路径和文件名
6 OpenFileDialog dlg = new OpenFileDialog();
7 dlg.Filter = "Shape(*.shp)|*.shp|All Files(*.*)|*.*";
8 dlg.Title = "Open Shapefile data";
9 dlg.ShowDialog();
10 string strFullPath = dlg.FileName;
11 if (strFullPath == "") return;
12 int Index = strFullPath.LastIndexOf("//");
13 string filePath = strFullPath.Substring(0, Index);
14 string fileName = strFullPath.Substring(Index + 1);
15
16 //打开工作空间并添加shp文件
17 pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
18
pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0);
19 pFeatureLayer = new FeatureLayerClass();
20
21 pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(fileName);
22 pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
23 axMapControl1.Map.AddLayer(pFeatureLayer);
24 axMapControl1.ActiveView.Refresh();
2.加载栅格数据
1 IWorkspaceFactory pWorkspaceFactory;
2 IRasterWorkspace pRasterWorkspace;
3
4 OpenFileDialog dlg = new OpenFileDialog();
5 dlg.Filter = "Layer File(*.lyr)|*.jpg;*.bmp;*.tiff";
6 dlg.Title = "Open Raster Data File";
7 dlg.ShowDialog();
8 //获取当前路径和文件名
9 string strFullPath = dlg.FileName;
10 if (strFullPath == "") return;
11 int Index = strFullPath.LastIndexOf("//");
12 string fileName = strFullPath.Substring(Index + 1);
13 string filePath = strFullPath.Substring(0, Index);
14
15 pWorkspaceFactory = new RasterWorkspaceFactoryClass();
16 pRasterWorkspace = (IRasterWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0);
17 IRasterDataset pRasterDataset = (IRasterDataset)pRasterWorkspace.OpenRasterDataset(fileName);
18 IRasterLayer pRasterLayer = new RasterLayerClass();
19 pRasterLayer.CreateFromDataset(pRasterDataset);
20 axMapControl1.Map.AddLayer(pRasterLayer);
21 axMapControl1.ActiveView.Refresh();
2 IRasterWorkspace pRasterWorkspace;
3
4 OpenFileDialog dlg = new OpenFileDialog();
5 dlg.Filter = "Layer File(*.lyr)|*.jpg;*.bmp;*.tiff";
6 dlg.Title = "Open Raster Data File";
7 dlg.ShowDialog();
8 //获取当前路径和文件名
9 string strFullPath = dlg.FileName;
10 if (strFullPath == "") return;
11 int Index = strFullPath.LastIndexOf("//");
12 string fileName = strFullPath.Substring(Index + 1);
13 string filePath = strFullPath.Substring(0, Index);
14
15 pWorkspaceFactory = new RasterWorkspaceFactoryClass();
16 pRasterWorkspace = (IRasterWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0);
17 IRasterDataset pRasterDataset = (IRasterDataset)pRasterWorkspace.OpenRasterDataset(fileName);
18 IRasterLayer pRasterLayer = new RasterLayerClass();
19 pRasterLayer.CreateFromDataset(pRasterDataset);
20 axMapControl1.Map.AddLayer(pRasterLayer);
21 axMapControl1.ActiveView.Refresh();
3.加载CAD数据
1 IWorkspaceFactory pWorkspaceFactory;
2 IFeatureWorkspace pFeatureWorkspace;
3 IFeatureLayer pFeatureLayer;
4 IFeatureDataset pFeatureDataset;
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 (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 CadWorkspaceFactoryClass();
17 pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0);
18 //打开一个要素集
19 pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(fileName);
20 //IFeaturClassContainer可以管理IFeatureDataset中的每个要素类
21 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 if (pFeatClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation)
27 //如果是注记,则添加注记层
28 pFeatureLayer = new CadAnnotationLayerClass();
29 else//如果是点、线、面,则添加要素层
30 {
31 pFeatureLayer = new FeatureLayerClass();
32 pFeatureLayer.Name = pFeatClass.AliasName;
33 pFeatureLayer.FeatureClass = pFeatClass;
34 axMapControl1.Map.AddLayer(pFeatureLayer);
35 axMapControl1.ActiveView.Refresh();
36 }
37 }
2 IFeatureWorkspace pFeatureWorkspace;
3 IFeatureLayer pFeatureLayer;
4 IFeatureDataset pFeatureDataset;
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 (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 CadWorkspaceFactoryClass();
17 pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0);
18 //打开一个要素集
19 pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(fileName);
20 //IFeaturClassContainer可以管理IFeatureDataset中的每个要素类
21 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 if (pFeatClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation)
27 //如果是注记,则添加注记层
28 pFeatureLayer = new CadAnnotationLayerClass();
29 else//如果是点、线、面,则添加要素层
30 {
31 pFeatureLayer = new FeatureLayerClass();
32 pFeatureLayer.Name = pFeatClass.AliasName;
33 pFeatureLayer.FeatureClass = pFeatClass;
34 axMapControl1.Map.AddLayer(pFeatureLayer);
35 axMapControl1.ActiveView.Refresh();
36 }
37 }
4.加载PersonGeodatabase数据
1 IWorkspaceFactory pAccessWorkspaceFactory;
2 IFeatureWorkspace pFeatureWorkspace;
3 IFeatureLayer pFeatureLayer;
4 IFeatureDataset pFeatureDataset;
5
6 //获取当前路径和文件名
7 OpenFileDialog 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;
13
14 //打开personGeodatabase,并添加图层
15 pAccessWorkspaceFactory = new AccessWorkspaceFactoryClass();
16 //打开工作空间并遍历数据集
17 IWorkspace pWorkspace = pAccessWorkspaceFactory.OpenFromFile(strFullPath, 0);
18 IEnumDataset pEnumDataset = pWorkspace.get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny);
19 pEnumDataset.Reset();
20 IDataset pDataset = pEnumDataset.Next();
21 //如果数据集是IFeatureDataset,则遍历它下面的子类
22 if (pDataset is IFeatureDataset)
23 {
24 pFeatureWorkspace = (IFeatureWorkspace)pAccessWorkspaceFactory.OpenFromFile(strFullPath, 0);
25 pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(pDataset.Name);
26 IEnumDataset pEnumDataset1 = pFeatureDataset.Subsets;
27 pEnumDataset1.Reset();
28 IDataset pDataset1 = pEnumDataset1.Next();
29 //如果子类是FeatureClass,则添加到axMapControl1中
30 if (pDataset1 is IFeatureClass)
31 {
32 pFeatureLayer = new FeatureLayerClass();
33 pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(pDataset1.Name);
34 pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
35
2 IFeatureWorkspace pFeatureWorkspace;
3 IFeatureLayer pFeatureLayer;
4 IFeatureDataset pFeatureDataset;
5
6 //获取当前路径和文件名
7 OpenFileDialog 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;
13
14 //打开personGeodatabase,并添加图层
15 pAccessWorkspaceFactory = new AccessWorkspaceFactoryClass();
16 //打开工作空间并遍历数据集
17 IWorkspace pWorkspace = pAccessWorkspaceFactory.OpenFromFile(strFullPath, 0);
18 IEnumDataset pEnumDataset = pWorkspace.get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny);
19 pEnumDataset.Reset();
20 IDataset pDataset = pEnumDataset.Next();
21 //如果数据集是IFeatureDataset,则遍历它下面的子类
22 if (pDataset is IFeatureDataset)
23 {
24 pFeatureWorkspace = (IFeatureWorkspace)pAccessWorkspaceFactory.OpenFromFile(strFullPath, 0);
25 pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(pDataset.Name);
26 IEnumDataset pEnumDataset1 = pFeatureDataset.Subsets;
27 pEnumDataset1.Reset();
28 IDataset pDataset1 = pEnumDataset1.Next();
29 //如果子类是FeatureClass,则添加到axMapControl1中
30 if (pDataset1 is IFeatureClass)
31 {
32 pFeatureLayer = new FeatureLayerClass();
33 pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(pDataset1.Name);
34 pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
35