AE - 02.矢量、栅格、Mxd的加载

AE - 02.矢量、栅格、Mxd的加载

流程图

引用类库及接口描述
  • 引用类库:

      using ESRI.ArcGIS.Carto;
      using ESRI.ArcGIS.Geometry;
      using ESRI.ArcGIS.Geodatabase;
      using ESRI.ArcGIS.DataSourcesFile;
      using ESRI.ArcGIS.DataSourcesRaster;
    
  • 接口:

    1. OpenFileDialog 接口:用于打开文件对话框
    2. IWorkspaceFactory 接口:工作空间工厂,工作空间的发布者,允许客户连接通过一组连接属性定义的工作空间。普通类。
    3. IWorkspace 接口:提供访问工作空间的通用属性和方法,如它的连接属性,以及包含的数据集的方法。
    4. IFeatureWorkspace 接口:用于访问和管理地理数据库中的要素的重要成分—数据集。
    5. IRasterWorkspace 接口:用于打开和建立基于文件的RasterDataset。
    6. IFeatureClass 接口:获取和设置要素类属性的主要接口。
    7. IFeatureLayer 接口:继承自ILayer,提供了访问基于矢量数据图层的属性和方法。、
    8. ILayer 接口:Layer 是图层对象,是数据的外壳,必须建立在数据的基础上才有意义。
    9. IMap 接口:许多图层的集合,由多个ILayer构成。
结构
  • 矢量
    1. 获取shp文件的路径和文件名称
    2. 由工作空间工厂创建Shp工作空间工厂类,打开工作空间
    3. 转换工作空间为要素工作空间,打开要素类
    4. 创建要素图层,设置要素图层的FeatureClass为上面打开的要素类
    5. 转换IFeatureLayer为ILayer,添加到mapcontorl中。
    6. 刷新
  • 栅格
    1. 获取shp文件的路径和文件名称
    2. 由工作空间工厂创建Raster工作空间工厂类,打开工作空间
    3. 转换工作空间为栅格工作空间,打开栅格数据集
    4. 影像金字塔的判断和创建
    5. 新建栅格图层,添加到mapcontorl中。
    6. 刷新
代码

七、代码

  1. 打开按钮的点击事件

     private void menu_open_Click(object sender, EventArgs e)
     {
         addMapFile();
     }
    
  2. 打开文件

     private void addMapFile()
     {
         OpenFileDialog pOpenfileDialog = new OpenFileDialog();
         pOpenfileDialog.Filter = "全部文件|*.*" +
             "|Shape 文件|*.shp" +
             "|Mxd 文件|*.mxd" +
             "|栅格 文件|*.tif;*.tiff;*.jpep;*.jpg;*.png;*.bmp";
         if (pOpenfileDialog.ShowDialog() == DialogResult.OK)
         {
             string path = pOpenfileDialog.FileName;
             bool shp = path.EndsWith(".shp");
             bool mxd = path.EndsWith(".mxd");
             bool tif = path.EndsWith(".tif") || path.EndsWith(".tiff") || path.EndsWith(".jpep") 
                 || path.EndsWith(".jpg") || path.EndsWith(".png") || path.EndsWith(".bmp");
    
             if (shp)
                 openShpFile(path);
             else if (mxd)
                 openShpFile(path);
             else if (tif)
                 openShanGe(path);
         }
     }
    
  3. 打开shp

     /// <summary>
     /// 打开shp数据
     /// </summary>
     private void openShpFile(string file)
     {
         int index = 0;
         index = file.LastIndexOf("\\");
         string filePath = file.Substring(0, index);
         string fileName = file.Substring(index + 1, file.Length - (index + 1));
         IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
         IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(filePath, 0);
         IFeatureWorkspace pFeatureWokkspace = pWorkspace as IFeatureWorkspace;
         IFeatureClass pFC = pFeatureWokkspace.OpenFeatureClass(fileName);
         IFeatureLayer pFLayer = new FeatureLayer();
         pFLayer.FeatureClass = pFC;
         pFLayer.Name = pFC.AliasName;
         ILayer pLayer = pFLayer as ILayer;
         IMap pMap = mapControl.Map;
         pMap.AddLayer(pLayer);
         mapControl.ActiveView.Refresh();
     }
    
  4. 打开栅格

     	/// <summary>
         /// 打开栅格数据
         /// </summary>
         private void openShanGe(string Path)
         {
             string RasterPath = System.IO.Path.GetDirectoryName(Path);
             string RasterName = System.IO.Path.GetFileName(Path);
             IWorkspaceFactory pRasterWsF = new RasterWorkspaceFactory();
             IWorkspace pWs = pRasterWsF.OpenFromFile(RasterPath, 0);
             IRasterWorkspace pRasterWs = pWs as IRasterWorkspace;
             IRasterDataset pRasterDS = pRasterWs.OpenRasterDataset(RasterName);
             IRasterPyramid pRasterPyramid = pRasterDS as IRasterPyramid;
             if ((pRasterPyramid != null)&&(!pRasterPyramid.Present))
             {
                 if (MessageBox.Show("是否开始创建金字塔?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.OK)
                 {
                     Stopwatch sw = new Stopwatch();
                     sw.Start();
                        pRasterPyramid.Create();
                     sw.Stop();
                     MessageBox.Show("创建完成,Time:"+ sw.ElapsedMilliseconds.ToString()+"ms");
                 }
                 else
                         MessageBox.Show("放弃创建金字塔");
             }
             IRasterLayer pRasterLayer = new RasterLayer();
             pRasterLayer.CreateFromRaster(pRasterDS.CreateDefaultRaster());
             IMap pmap = mapControl.Map;
             pmap.AddLayer(pRasterLayer);
             mapControl.ActiveView.Refresh();
             OpenStatus();
         }
    
  5. 打开mxd

     /// <summary>
     /// 打开mxd数据
     /// </summary>
     private void openMXD(string path)
     {
         mapControl.MousePointer = esriControlsMousePointer.esriPointerHourglass;
         mapControl.LoadMxFile(path, 0, Type.Missing);
         mapControl.MousePointer = esriControlsMousePointer.esriPointerDefault;
         OpenStatus();
     }
    
发布了208 篇原创文章 · 获赞 80 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/DanBo_C/article/details/102822431
AE