⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addlayers.cs

📁 利用C#和AE添加图层函数,非常经典的算法
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Resources;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.ADF.CATIDs;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesGDB;

namespace MHGIS.AddLayer
{
    [Guid("c1220f36-0f10-42f3-83c7-ef854255929b")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("AddLayer.AddLayers")]
    public class AddLayers
    {
        private IActiveView _activeView;
        public AddLayers(IActiveView activeView)
        {
            _activeView = activeView;
        }
        
        //一、shp文件的加载:
        public void addShpLayer(string strFullPath)
        {
            IWorkspaceFactory pWorkspaceFactory;
            IFeatureWorkspace pFeatureWorkspace;
            IFeatureLayer pFeatureLayer;

            //获取当前路径和文件名          
            if (strFullPath == "") return;
            int Index = strFullPath.LastIndexOf("\\");
            string filePath = strFullPath.Substring(0, Index);
            string fileName = strFullPath.Substring(Index + 1);

            //打开工作空间并添加shp文件
            pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
            //注意此处的路径是不能带文件名的
            pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0);
            pFeatureLayer = new FeatureLayerClass();
            //注意这里的文件名是不能带路径的
            pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(fileName);
            pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
            _activeView.FocusMap.AddLayer(pFeatureLayer);
            _activeView.Refresh();
        }

        //二、个人数据库(personGeodatabase)的加载:
        public void addPGDBLayer(string strFullPath)
        {
            IWorkspaceFactory pWorkspaceFactory;
            IFeatureWorkspace pFeatureWorkspace;
            IFeatureLayer pFeatureLayer;
            IFeatureDataset pFeatureDataset;
            //获取当前路径和文件名
            if (strFullPath == "") return;

            //打开personGeodatabase,并添加图层
            IWorkspaceFactory pAccessWorkspaceFactory = new AccessWorkspaceFactoryClass();
            //打开工作空间并遍历数据集
            IWorkspace pWorkspace = pAccessWorkspaceFactory.OpenFromFile(strFullPath, 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(strFullPath, 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(pDataset1.Name);
                    pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
                    _activeView.FocusMap.AddLayer(pFeatureLayer);
                    _activeView.Refresh();
                }
            }
        }

        //三、CAD文件的加载:
        public void addCADLayer(string strFullPath)
        {
            IWorkspaceFactory pWorkspaceFactory;
            IFeatureWorkspace pFeatureWorkspace;
            IFeatureLayer pFeatureLayer;
            IFeatureDataset pFeatureDataset;
            //获取当前路径和文件名
            if (strFullPath == "") return;
            int Index = strFullPath.LastIndexOf("\\");
            string filePath = strFullPath.Substring(0, Index);
            string fileName = strFullPath.Substring(Index + 1);
            //打开CAD数据集
            pWorkspaceFactory = new CadWorkspaceFactoryClass();
            pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0);
            //打开一个要素集
            pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(fileName);
            //IFeaturClassContainer可以管理IFeatureDataset中的每个要素类   
            IFeatureClassContainer pFeatClassContainer = (IFeatureClassContainer)pFeatureDataset;
            //对CAD文件中的要素进行遍历处理 
            for (int i = 0; i < pFeatClassContainer.ClassCount - 1; i++)
            {
                IFeatureClass pFeatClass = pFeatClassContainer.get_Class(i);
                if (pFeatClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation)
                    //如果是注记,则添加注记层
                    pFeatureLayer = new CadAnnotationLayerClass();
                else
                    //如果是点、线、面,则添加要素层
                    pFeatureLayer = new FeatureLayerClass();
                pFeatureLayer.Name = pFeatClass.AliasName;
                pFeatureLayer.FeatureClass = pFeatClass;
                _activeView.FocusMap.AddLayer(pFeatureLayer);
                _activeView.Refresh();
            }
        }

        //四、栅格数据的加载:
        public void addRasterLayer(string strFullPath)
        {
            IWorkspaceFactory pWorkspaceFactory;
            IRasterWorkspace pRasterWorkspace;

            //获取当前路径和文件名
            if (strFullPath == "") return;
            int Index = strFullPath.LastIndexOf("\\");
            string fileName = strFullPath.Substring(Index + 1);
            string filePath = strFullPath.Substring(0, Index);

            pWorkspaceFactory = new RasterWorkspaceFactoryClass();
            pRasterWorkspace = (IRasterWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0);
            IRasterDataset pRasterDataset = (IRasterDataset)pRasterWorkspace.OpenRasterDataset(fileName);
            IRasterLayer pRasterLayer = new RasterLayerClass();
            pRasterLayer.CreateFromDataset(pRasterDataset);
            _activeView.FocusMap.AddLayer(pRasterLayer);
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -