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

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应用技能大赛开发题答案点这里,尚在不定期更新中

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值