ArcEngine加载地图的多种方式

ArcEngine加载地图的多种方式

以下加载地图的方法需要写在静态类中,可直接调用

1. 加载shp

        /// <summary>
        /// 添加shp方法
        /// </summary>
        /// <param name="strFileName">shp的文件路径</param>
        /// <returns>返回结果类型为图层类型</returns>
        public static ILayer AddShape(string strFileName)
        {
            //获取路径
            string WorkSpacePath = System.IO.Path.GetDirectoryName(strFileName);
            //获取文件名
            string strShpFileName = System.IO.Path.GetFileName(strFileName);
            //定义接口变量,并对其实例化
            IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
            // 定义工作空间变量,利用工作空间工厂打开shp文件
            IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(WorkSpacePath, 0);
            //定义接口变量进行实例化
            IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
            //实例化打开的文件夹
            IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(strShpFileName);
            //定义数据集对象
            IDataset pDataset = pFeatureClass as IDataset;
            //定义特征图层对象
            IFeatureLayer pFeatureLayer = new FeatureLayerClass();
            //定义特征图层的特征数据类
            pFeatureLayer.FeatureClass = pFeatureClass;
            //定义特征图层的名称
            pFeatureLayer.Name = pDataset.Name;
            //定义图层
            ILayer pLayer = pFeatureLayer as ILayer;
            //返回图层
            return pLayer;                                                           
        }

2. 加载栅格

        /// <summary>
        /// 加载栅格文件
        /// </summary>
        /// <param name="strFileName">文件的位置</param>
        /// <returns>返回的图层类型</returns>
        public static ILayer AddRaster(string strFileName)
        {
            //获取地址
            string WorkSpacePath = System.IO.Path.GetDirectoryName(strFileName);                    
            string strRasterFileName = System.IO.Path.GetFileName(strFileName);                     //获取文件名
            IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactoryClass();                //利用工作空间工厂定义接口变量,并实例化该接口
            IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(WorkSpacePath, 0);               //声明并实例化工作空间变量
            IRasterWorkspace pRasterWorkspace = pWorkspace as IRasterWorkspace;                     //声明并实例化栅格工作空间变量
            IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(strRasterFileName);  //定义栅格数据集并利用所选栅格数据文件进行实例化
            //影像金字塔的判断与创建
            IRasterPyramid pRasPyramid = pRasterDataset as IRasterPyramid;
            if (pRasPyramid != null)
            {
                if (!(pRasPyramid.Present)) //没有金字塔
                {
                    pRasPyramid.Create();   //创建金字塔
                }
            }
            IRaster pRaster = pRasterDataset.CreateDefaultRaster();     //定义栅格数据
            IRasterLayer pRasterLayer = new RasterLayerClass();         //定义栅格数据层
            pRasterLayer.CreateFromRaster(pRaster);                     //在栅格数据层中加载数据层数据
            ILayer player = pRasterLayer as ILayer;                     //定义图层
            return player;                                              //返回图层
        }

3. 加载mxd

加载mxd 的方法需要建立一个MapDocument的字段,用于地图属性的访问。对于此对象的引用对大多数地图脚本操作都十分重要。

        // 建立MapDocument类字段,用于访问地图文档的属性和方法
        MapDocument mapDocument = null;

        /// <summary>
        /// 打开mxd文档方法
        /// </summary>
        /// <param name="axMapControl"></param>
        public void OpenFile(AxMapControl axMapControl)
        {
            //打开文件字符流
            OpenFileDialog pDialog = new OpenFileDialog();
            //设置打开文件管理器的标题
            pDialog.Title = "打开mxd文档";
            if (pDialog.ShowDialog() == DialogResult.OK)
            {
                mapDocument = new MapDocumentClass();
                // 获取文件路径
                string pFileName = pDialog.FileName;
                // 检查mxd是否合法
                if (axMapControl.CheckMxFile(pFileName))
                {
                    // 打开地图文档
                    mapDocument.Open(pFileName, "");
                    // 加载地图文档时候将鼠标更改为正在加载状态
                    axMapControl.MousePointer = ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerHourglass;
                    // 在MapControl控件加载mxd地图数据
                    axMapControl.LoadMxFile(pFileName);
                    // 加载完成后鼠标更改为默认指针样式
                    axMapControl.MousePointer = ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerDefault;
                }
                else
                {
                    MessageBox.Show("加载错误");
                }
            }
        }

本文的代码是参考 https://blog.****.net/weiwanshu/article/details/49784019 这篇博客,其中加入了自己的见解,推荐一下这篇博文,非常不错!

上一篇:2021-2022-1 20211420《信息安全专业导论》第七周学习总结


下一篇:在VS2019环境下配置ArcObject(ArcGIS Engine) 10.2 开发环境