• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
bobird的学习笔记
博客园    首页    新随笔    联系   管理    订阅  订阅

出符合条件的要素集

使用 IFeatureDataConverter2  接口

使用方法ConvertFeatureClass method(),这个方法需要下面的参数

public IEnumInvalidObject ConvertFeatureClass (     IDatasetName inputFClassName,     IQueryFilter InputQueryFilter,     ISelectionSet InputSelectionSet,     IFeatureDatasetName outputFDatasetName,     IFeatureClassName outputFClassName,     IGeometryDef OutputGeometryDef,     IFields OutputFields,     string configKey,     int FlushInterval,     int parentHWND );

public void ConvertData()
        {
            //设置inputselectset
            IFeatureLayer pFeatureLayer = this.axMapControl1.Map.get_Layer(0) as IFeatureLayer;//获取导出的图层
            IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection;//将当前图层上与要素选择接口关联
            ISelectionSet pSelection = pFeatureSelection.SelectionSet;//获取当前图层上的选择集

            //设置inputFclassname
            IDataset pInDataset = pFeatureLayer.FeatureClass as IDataset;//获取当前图层的FeatureClass所在的数据集
            IDatasetName pInputFClassName = (IDatasetName)pInDataset.FullName;//获取输入的数据集的路径全名

            ///////下面的代码是设置,导出数据的一些属性
            SaveFileDialog sFd = new SaveFileDialog();
            sFd.Title = "保存shp文件";
            sFd.DefaultExt = "shp";
            sFd.Filter = "shp文件(*.shp)|*.shp";
            sFd.ShowDialog();
            string ExportShapeFileName = sFd.FileName;
            string ExportFileShortName = System.IO.Path.GetFileNameWithoutExtension(ExportShapeFileName);//获取导出shapefile的名称
            string ExportFilePath = System.IO.Path.GetDirectoryName(ExportShapeFileName);//获取导出shapefile的路劲

            IWorkspaceFactory pShpWorkspaceFactory = new ShapefileWorkspaceFactoryClass();//创建一个输出shp文件的工作空间工厂,用于管理导出的数据
            IWorkspaceName pOutWorkspaceName = new WorkspaceNameClass();//实例化一个工作空间名称接口的实例对象
            pOutWorkspaceName = pShpWorkspaceFactory.Create(ExportFilePath, ExportFileShortName, null, 0);//根据输入的路径和文件名创建一个工作空间名称对象
            
            
            IFeatureDatasetName pOutFeatureDatasetName = null;//创建一个要素数据集名称对象,设置导出要素的数据集合名称
            IFeatureClassName pOutFeatureClassName = new FeatureClassNameClass();//创建一个要素类名称对象,用于实例化IDatasetName           
            IDatasetName pOutDatasetName;
            pOutDatasetName = (IDatasetName)pOutFeatureClassName;
            pOutDatasetName.Name = ExportFileShortName;//设置导出数据集的名称
            pOutDatasetName.WorkspaceName = pOutWorkspaceName;//设置导出数据集的工作空间的名称       

            IFields pInFields = pFeatureLayer.FeatureClass.Fields;//获取输入图层的要素类的字段集合
            
            //通过IFieldChecker检查字段的合法性,为输出SHP获得字段集合
            IFieldChecker pFieldChecker= new FieldChecker();     
            IEnumFieldError pEnumFieldError = null;//用于获取错误字段的集合
            IFields pOutFields;//用于获取正确字段的集合
            pFieldChecker.Validate(pInFields, out pEnumFieldError, out pOutFields);
           
            IField pGeoField = null;//用于获取,输入图层的几何字段
            for (int iCounter = 0; iCounter < pOutFields.FieldCount; iCounter++) //通过循环查找几何字段
            {
                if (pOutFields.get_Field(iCounter).Type == esriFieldType.esriFieldTypeGeometry)//根据字段类型,判读出几何字段
                {
                    pGeoField = pOutFields.get_Field(iCounter);
                    break;
                }
            }
            //得到几何字段的相关属性
            IGeometryDef pOutGeometryDef= pGeoField.GeometryDef;
            //设置几何字段的空间参考和网格
            IGeometryDefEdit pOutGeometryDefEdit = (IGeometryDefEdit)pOutGeometryDef;
            pOutGeometryDefEdit.GridCount_2 = 1;
            pOutGeometryDefEdit.set_GridSize(0, 1500000);
          
            try
            {
                IFeatureDataConverter2 pFeaDaCon = new FeatureDataConverterClass();
                //带入参数,导出数据
                pFeaDaCon.ConvertFeatureClass(pInputFClassName, null, pSelection, pOutFeatureDatasetName, pOutFeatureClassName, pOutGeometryDef, pOutFields, "", 1000, 0);
                MessageBox.Show("导出成功", "系统提示");
            }
            catch (Exception ex)
            {
                MessageBox.Show("the following exception occurred:" + ex.ToString());
            }
        }

 

posted on 2013-07-03 15:53  bobird  阅读(277)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3