首页 > 代码库 > Arc Engine下数据的加载处理

Arc Engine下数据的加载处理

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);1516            //打开工作空间并添加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);1415            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;1314            //打开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                    axMapControl1.Map.AddLayer(pFeatureLayer);36                    axMapControl1.ActiveView.Refresh();37                }38                else39                {40                    MessageBox.Show("No FeatureLayer!");41                }42            }43            else44            {45                pFeatureWorkspace = (IFeatureWorkspace)pWorkspace;46                pFeatureLayer = new FeatureLayerClass();47                pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass("图层名");48                pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;49                axMapControl1.Map.AddLayer(pFeatureLayer);50                axMapControl1.ActiveView.Refresh();51            }

5.加载SDE数据库数据

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                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                propertySet.SetProperty("USER", user);11                propertySet.SetProperty("PASSWORD", password);12                propertySet.SetProperty("VERSION", version);1314                ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 workspaceFactory;15                workspaceFactory = (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.Message), e);21            }22        }2324            IWorkspace pWorkspace = arcSDEWorkspaceOpen("计算机名", "5151", "数据库用户", "密码", "", "sde.DEFAULT");2526            IFeatureWorkspace pFeattureWS = (IFeatureWorkspace)pWorkspace;27            IFeatureClass pFeatureClass = pFeattureWS.OpenFeatureClass("图层名");28            IFeatureLayer pFeatureLayer = new FeatureLayerClass();29            pFeatureLayer.FeatureClass = pFeatureClass;3031            axMapControl1.AddLayer(pFeatureLayer);32            axMapControl1.Refresh();

6、文件地理数据库加载

          IFeatureWorkspace pFeatureWorkspace;                IFeatureLayer pFeatureLayer;               IFeatureDataset pFeatureDataset;                string filePath = @"D:\My Documents\ArcGIS\新建文件地理数据库.gdb";                string filename = "haha";                //打开personGeodatabase,并添加图层                IWorkspaceFactory pAccessWorkspaceFactory = new FileGDBWorkspaceFactoryClass();                //打开工作空间并遍历数据集                IWorkspace pWorkspace = pAccessWorkspaceFactory.OpenFromFile(filePath, 0);                IEnumDataset pEnumDataset = pWorkspace.get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny);                pEnumDataset.Reset();                IDataset pDataset = pEnumDataset.Next();                //如果数据集是IFeatureDataset,则遍历它下面的子类                if (pDataset is IFeatureDataset)                {                    pFeatureWorkspace = (IFeatureWorkspace)pAccessWorkspaceFactory.OpenFromFile(filePath, 0);                    pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(pDataset.Name);                    IEnumDataset pEnumDataset1 = pFeatureDataset.Subsets;                    pEnumDataset1.Reset();                    IDataset pDataset1 = pEnumDataset1.Next();                    //如果子类是FeatureClass,则添加到axMapControl1中                    if (pDataset1 is IFeatureClass)                    {                        pFeatureLayer = new FeatureLayerClass();                        pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(filename);                        pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;                        IRgbColor pRgbColor = new RgbColorClass();                        pRgbColor.Red = 255;                        pRgbColor.Green = 255;                        pRgbColor.Blue = 0;                        pRgbColor.Transparency = 1;                        ILineSymbol pLineSymbol = new SimpleLineSymbolClass();                        IFillSymbol pFillSymbol = new SimpleFillSymbolClass();                        pFillSymbol.Color = pRgbColor;                        pRgbColor.Transparency = 1;                        pLineSymbol.Color = pRgbColor;                        pLineSymbol.Width = 0;                        pFillSymbol.Outline = pLineSymbol;                        ISimpleRenderer pSimpleRender = new SimpleRendererClass();                        pSimpleRender.Symbol = pFillSymbol as ISymbol;                        IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer;                        pGeoFeatureLayer.Renderer = pSimpleRender as IFeatureRenderer;                        pFeatureLayer = pGeoFeatureLayer as IFeatureLayer;                        axMapControl1.Map.AddLayer(pFeatureLayer);                        axMapControl1.ActiveView.Refresh();                    }
}

 

Arc Engine下数据的加载处理