欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ArcGIS二次开发基础教程(01) :打开mxd文件,添加(.shp),(.lyr),(.mdb),(.tif;.img)等多种类型数据

程序员文章站 2022-06-12 16:55:26
...

ArcGIS二次开发基础教程(01) :打开mxd文件,添加ShapeFiles(.shp),LayerFiles(.lyr),Personal GeoDatabase(.mdb),RasterFiles(.tif;.img)等多种类型的数据

(开发环境:VS2010+ArcEngine10.2+C#)

  1. 打开文件对话框

    openFileDialog1.Title = "打开文件";
    //这里只用了五种类型的文件
    openFileDailog1.Filter = "ArcMap Document(*.mxd)|*.mxd|ShapeFile(*.shp)|*.shp|Personal GeoDatabase(*.mdb)|*.mdb|LayerFile(*.lyr)|*.lyr|RasterFile(*.tif;*.img)|*.tif;*.img";
    //设置不能多选
    openFileDialog1.Multiselect = false;
    if(openFileDialog.ShowDialog() == DialogResult.OK)
    {
        //记录文件路径为全局变量 方便后面使用(变量声明未写出)
        path = openFileDialog1.FileName;
        //获取文件名
        string fileName = System.IO.Path.GetFileName(path);
        //获取文件所在文件夹,打开工作空间需要
        string directory = Syste.IO.Path.GetDirectory(path);
        //文件扩展名
        string extention = System.IO.Path.GetExtention(path).Replace(".","").ToLower();
        //判断打开为何种类型的文件,调用相应的处理函数
        switch(extension)
        {
            case "mxd":
                OpenMXDFile(path);
                break;
            case "shp":
                OpenShapeFile(fileName,directory);
                break;
            case "mdb":
                OpenPersonalGeoDatabase(path);
                break;
            case "lyr":
                OpenLayerFile(path);
                break;
            case "tif":
            case "img":
                OpenRasterFile(path);
                break;
            default:
                MessageBox.Show("Error");
                return;
        }
        axMapControl1.Refresh();
        axTOCControl.Updata();
    }
    
    1. 打开mxd文件

      void OpenMXDFile(path)
      {
          //直接调用mapcontrol的方法打开文件,当然还有其它方法
          axMapControl1.LoadMxFile(Path);
      }
      
      
    2. shapeFile文件

      void OpenShapeFile(string fileName,string directory)
      {
          //创建与数据类型相应的工作空间工厂 详情可查阅帮助文档
      	IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();
          //在数据所在文件夹中打开工作空间
      	IFeatureWorkspace featrueWorkspace = workspaceFactory.OpenFromFile(directory) as IFeatureWorkspace;
          //以文件名打开要素类
          IFeatureClass featrueClass = featureWorkspace.OpenFeatrueClass(fileName);
          //创建要素图层并赋值
          IFeatureLayer featureLayer = new FeatureLayerClass();
          featureLayer.FeatureClass = featureClass;
          featureLayer.Name = featureClass.AliceName;
          //添加到mapcontrol中
          axMapControl1.AddLayer(featureLayer);
          axMapControl1.Refresh();
          axTOCControl1.Update();
      }
      
    3. mdb数据库

      void OpenPersonalGeoDatabase(path)
      {
          //创建与数据类型相应的工作空间工厂
      	IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactory();
          //直接以数据库文件全名打开数据库  这与打开要素类工作空间不同
      	IWorkSpace workspace = workspaceFactory.OpenFromFile(path);
          //获取相应类型的数据集
          IEnumDataset enumDataset = workspace.get_Datasets(esriDatasetType.esriDTFeatureClass);//是什么数据就用什么类型,这里用FeatureClass做示范,也可用esriDTany表示任意类型
          IFeatureClass featrueClass = enumDataset.Next();
          //遍历每个要素类创建要素图层并添加到mapcontrol中
          while(featureClass != null)
          {
              IFeatureLayer layer = new FeatureLayerClass();
              layer.FeatureClass = featureClass;
              layer.Name = featureClass.AliceName;
              axMapControl1.AddLayer(layer as ILayer);
              featrueClass = enumDataset.Next();
          }
          axMapControl1.Refresh();
          axTOCControl1.Update();
      }
      
    4. img,tif栅格数据

      void OpenRasterFile(path)
      {
          //通过路径直接创建
      	IRasterLayer rasterLayer = new RasterLayerClass();
      	rasterLayer.CreateFromFile(path);
      	axMapControl.AddLayer(rasterLayer as ILayer);
      }
      

还有一种最简单的添加数据的方法!!!

//直接使用AddData命令对象  这是我已知的最简单的用代码添加数据的方法
//Toolbar也提供了很多集成命令工具,以下代码也就是调用这些命令工具
ICommand icc = new ControlsAddDataCommandClass();
icc.OnCreate(axMapControl1.Object);//钩子函数
icc.OnClick();

历届GIS应用技能大赛开发题答案点这里,尚在不定期更新中