介绍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二次开发,如果有不对的地方,请多多包涵!