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二次開發,如果有不對的地方,請多多包涵!