现在的位置: 首页 > 综合 > 正文

ArcEngine 数据加载的几种类型

2012年04月28日 ⁄ 综合 ⁄ 共 6230字 ⁄ 字号 评论关闭

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.加载栅格数据

 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();


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            }

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

抱歉!评论已关闭.