介绍ArcGIS中各种数据的打开方法——shp(矢量文件)

2、加载shp文件到地图控件

ShapeFile是一种矢量数据模型的计算机数据组织文件,用于在计算机上表达矢量数据的计算机文件

加载ShapeFile文件最主要是:axMapControll控件对象所携带的AddShapeFile方法和Addlayer方法。

介绍两种加载shp文件的方法

方法一:使用axMapControl1对象的AddShapeFile方法加载ShapeFile文件

//path——为shp文件的路径目录,fileName——不带后缀的文件名
axMapControl1.AddShapeFile(path, fileName);

方法二:使用axMapControl1对象的AddLayer方法加载ShapeFile文件

//调用AddLayer方法添加shp图层
this.axMapControl1.AddLayer(pFLayer as ILayer);

方法二添加shp文件需要用到Map、Dataset、FeatureLayer和FeatureClass等对象。这些对象一般用到的主要接口有IMap、IActiveView、IDataset、IFeatureLayer和IFeatureClass等。

小提示:

IWorkspaceFactory 需要引用 using ESRI.ArcGIS.Geodatabase; 

ShapefileWorkspaceFactory 需要引用 using ESRI.ArcGIS.DataSourcesFile;

核心代码:

#region 打开Shp文件
        private void 打开Shp文件toolStripLabel1_Click(object sender, EventArgs e)
        {
            //方法一:
            ///addShapeFile1();
            //方法二:
            addShapeFile2();
        }
        /// <summary>
        /// 方法二:使用axMapControl1对象的AddLayer方法加载ShapeFile文件
        /// </summary>
        private void addShapeFile2()
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Title = "打开shp文件";
            ofd.Filter = "shp layer(*.shp)|*.shp";
            if(ofd.ShowDialog()==DialogResult.OK)
            {
                string file = ofd.FileName;
                int index = 0;
                //获取最后一个“\”时的索引位置
                index = file.LastIndexOf("\");
                //获得shp文件的路径
                string filePath = file.Substring(0, index);
                //获得shp文件名
                string fileName = file.Substring(index + 1, file.Length - (index + 1));
                //由工作空间工厂创建shp工作空间工厂类
                IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
                //打开shp文件的路径目录, 并强转赋予要素工作空间
                IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(filePath,0) as IFeatureWorkspace;
                //创建要素图层
                IFeatureLayer pFLayer = new FeatureLayerClass();
                //打开文件名
                pFLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(fileName);
                //定义pFLayer的别名
                pFLayer.Name = pFLayer.FeatureClass.AliasName;
                //调用AddLayer方法添加shp图层
                this.axMapControl1.AddLayer(pFLayer as ILayer);
                //axMapControl控件刷新
                this.axMapControl1.Refresh();
            }
        }

        /// <summary>
        /// 方法一:使用axMapControl1对象的AddShapeFile方法加载ShapeFile文件
        /// </summary>
        private void addShapeFile1()
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Title = "打开图层文件";
            ofd.Filter = "map documents(*.shp)|*.shp";
            if(ofd.ShowDialog()==DialogResult.OK)
            {
                //FileInfo类提供创建、复制、删除、移动和打开文件的实例方法
                FileInfo fileInfo = new FileInfo(ofd.FileName);
                //获取父目录并强制转换成字符型
                String path = fileInfo.Directory.ToString();
                //获取文件名
                String fileName = fileInfo.Name.Substring(0, fileInfo.Name.IndexOf("."));
                try
                {
                    //path——为shp文件的路径目录,fileName——不带后缀的文件名
                    axMapControl1.AddShapeFile(path, fileName);
                }
                catch(Exception e)
                {
                    MessageBox.Show("添加图层失败!!!"+e.ToString());
                }
            }
        }
        #endregion

谢谢观看!本人初学GIS二次开发,如果有不对的地方,请多多包涵!

原文地址:https://www.cnblogs.com/edcoder/p/11718735.html