出符合条件的要素集
使用 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()); } }
浙公网安备 33010602011771号