/// <summary> /// 将源表的字段放在目标数据库环境中进行检查,生成新的字段 /// </summary> /// <param name="pClass"></param> /// <param name="pTargetWks"></param> /// <param name="sError"></param> /// <returns></returns> public bool CheckFields(IClass pClass, IWorkspace pTargetWks, out IFields ResultFields) { ResultFields = null; IFields sourceFields = pClass.Fields; string sTableName = (pClass as IDataset).Name; if (sTableName.IndexOf('.') > 0) { //面积字段 string sAreaFieldName = sTableName + ".AREA"; int iAreaIndex = sourceFields.FindField(sAreaFieldName); if (iAreaIndex >= 0) { IFieldEdit fieldEdit = sourceFields.get_Field(iAreaIndex) as IFieldEdit; fieldEdit.Name_2 = "AREA"; fieldEdit.AliasName_2 = "面积"; } //长度字段 string sLenFieldName = sTableName + ".LEN"; int iLenIndex = sourceFields.FindField(sLenFieldName); if (iLenIndex >= 0) { IFieldEdit fieldEdit = sourceFields.get_Field(iLenIndex) as IFieldEdit; fieldEdit.Name_2 = "LEN"; fieldEdit.AliasName_2 = "长度"; } } // 创建字段检查对象 IFieldChecker pFieldChecker = new FieldChecker(); pFieldChecker.InputWorkspace = (pClass as IDataset).Workspace; pFieldChecker.ValidateWorkspace = pTargetWks; // 验证字段 IEnumFieldError pEnumFieldError = null; try { ErrorMessage = ""; IList <string> tempError = new List <string>(); pFieldChecker.Validate(sourceFields, out pEnumFieldError, out ResultFields); if (pEnumFieldError != null) { IFieldError pFieldError = null; while ((pFieldError = pEnumFieldError.Next()) != null) { tempError.Add(sourceFields.get_Field(pFieldError.FieldIndex).Name + GetFieldNameError(pFieldError.FieldError)); } } ErrorMessage = string.Join(",", tempError); } finally { if (pEnumFieldError != null) { Marshal.ReleaseComObject(pEnumFieldError); } Marshal.ReleaseComObject(pFieldChecker); } return(string.IsNullOrEmpty(ErrorMessage)); }
//格式转换后,检验字段的有效性并修复字段 YH 15/4/09 public static bool FieldsCheckAfterTransaction(IWorkspace pInputWorkspace, IWorkspace pOutPutWorkspace, IFields pInputFields, ref IFields pOoutPutFields) { bool functionReturnValue = false; IFieldChecker pFieldChecker = default(IFieldChecker); IEnumFieldError pEnumFieldError = null; pFieldChecker = new FieldChecker(); pFieldChecker.InputWorkspace = pInputWorkspace; pFieldChecker.ValidateWorkspace = pOutPutWorkspace; pFieldChecker.Validate(pInputFields, out pEnumFieldError, out pOoutPutFields); //处理字段中不符合语义规则的情况 if ((pEnumFieldError != null)) { pEnumFieldError.Reset(); IFieldError pFieldError = default(IFieldError); pFieldError = pEnumFieldError.Next(); //g_clsErrorHandle.DisplayInformation("导出字段中存在无效字段: " + pOoutPutFields.Field(pFieldError.FieldIndex).Name + "导出终止!!", false); MessageBoxEx.Show("导出字段中存在无效字段: " + pOoutPutFields.get_Field(pFieldError.FieldIndex).Name + "导出终止!!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return(false); return(functionReturnValue); } return(true); return(functionReturnValue); }
/// <summary> /// 检验字段合理性 /// </summary> /// <param name="targetWorkspace">目标工作空间</param> /// <param name="isReset">是否使用检验结果重置目标字段</param> /// <returns>是否通过字段检验,若不通过则错误信息可通过ErrorMessage属性获取</returns> public bool ValidateFields(IWorkspace targetWorkspace, bool isReset) { IFieldChecker pFieldChecker = new FieldChecker(); IEnumFieldError pEnumFieldError = null; IFields validateFilelds = null; pFieldChecker.ValidateWorkspace = targetWorkspace; pFieldChecker.Validate(m_Fields, out pEnumFieldError, out validateFilelds); if (pEnumFieldError != null) { IList <string> result = new List <string>(); IFieldError error = pEnumFieldError.Next(); while (error != null) { result.Add(string.Format("字段 {0} 出错,原因为 :{1}", m_Fields.Field[error.FieldIndex].Name, error.FieldError.ToString())); error = pEnumFieldError.Next(); } ErrorMessage = string.Join(";", result); if (isReset) { ResetFields(validateFilelds); } return(false); } return(true); }
public static void ExtractSelectFeatureFormLayer(IFeatureLayer ifeatureLayer_0, IFeatureWorkspace ifeatureWorkspace_0, IGeometry igeometry_0) { IEnumFieldError enumFieldError; IFields field; string str; ICursor cursor; try { IFeatureSelection ifeatureLayer0 = (IFeatureSelection)ifeatureLayer_0; if (ifeatureLayer0.SelectionSet.Count != 0) { IFeatureClass featureClass = ifeatureLayer_0.FeatureClass; IFields fields = featureClass.Fields; IFieldChecker fieldCheckerClass = new FieldChecker() { InputWorkspace = (featureClass as IDataset).Workspace, ValidateWorkspace = ifeatureWorkspace_0 as IWorkspace }; fieldCheckerClass.Validate(fields, out enumFieldError, out field); enumFieldError.Reset(); IFieldError fieldError = enumFieldError.Next(); string str1 = ""; while (fieldError != null) { fieldError.FieldError.ToString(); IField field1 = fields.Field[fieldError.FieldIndex]; IField field2 = field.Field[fieldError.FieldIndex]; string str2 = str1; string[] name = new string[] { str2, field2.Name, " reason: ", field1.Name, " " }; str1 = string.Concat(name); fieldError = enumFieldError.Next(); } Hashtable hashtables = new Hashtable(); string name1 = ifeatureLayer_0.Name; char chr = name1[0]; if ((chr < '0' ? false : chr <= '9')) { name1 = string.Concat("A", name1); } fieldCheckerClass.ValidateTableName(name1, out str); name1 = str; string name2 = ""; IFieldsEdit fieldsClass = new Fields() as IFieldsEdit; for (int i = field.FieldCount - 1; i >= 0; i--) { IField field3 = field.Field[i]; if (field3.Type == esriFieldType.esriFieldTypeGeometry) { name2 = field3.Name; IGeometryDef geometryDef = field3.GeometryDef; ISpatialReference spatialReference = (geometryDef.SpatialReference as IClone).Clone() as ISpatialReference; SpatialReferenctOperator.ChangeCoordinateSystem(ifeatureWorkspace_0 as IGeodatabaseRelease, spatialReference, false); (geometryDef as IGeometryDefEdit).SpatialReference_2 = spatialReference; (field3 as IFieldEdit).GeometryDef_2 = geometryDef; } if ((ifeatureWorkspace_0 as IWorkspace).Type != esriWorkspaceType.esriFileSystemWorkspace) { fieldsClass.AddField(field3); } else if (field3.Type != esriFieldType.esriFieldTypeBlob) { fieldsClass.AddField(field3); } } IFeatureClass featureClass1 = null; try { featureClass1 = ifeatureWorkspace_0.CreateFeatureClass(name1, fieldsClass, null, null, esriFeatureType.esriFTSimple, name2, ""); } catch (Exception exception) { MessageBox.Show("无法创建输出要素类!"); return; } IFeatureCursor featureCursor = null; IFeatureCursor featureCursor1 = featureClass1.Insert(true); IFeatureBuffer featureBuffer = featureClass1.CreateFeatureBuffer(); ifeatureLayer0.SelectionSet.Search(null, false, out cursor); featureCursor = (IFeatureCursor)cursor; for (IFeature j = featureCursor.NextFeature(); j != null; j = featureCursor.NextFeature()) { if (j.Shape != null) { Clip.InsertFeature(featureCursor1, featureBuffer, field, j, j.Shape, igeometry_0); } } featureCursor1.Flush(); Marshal.ReleaseComObject(featureBuffer); featureBuffer = null; Marshal.ReleaseComObject(featureCursor1); featureCursor1 = null; } } catch { } }
/// <summary> /// Validates a field name /// </summary> /// <param name="name">The field name to validate</param> /// <param name="message">If field name fails then this variable will contain a description</param> /// <returns>True if passed. False if failed.</returns> public bool ValidateFieldName(string name, out string message) { // Validate Input Arguments if (string.IsNullOrEmpty(name)) { throw new NullReferenceException("<name> argument cannot be null"); } // Create Field Checker IFieldChecker fieldChecker = new FieldCheckerClass(); fieldChecker.ValidateWorkspace = this._workspace; // Create Field IFieldEdit fieldEdit = new FieldClass(); fieldEdit.Name_2 = name; fieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger; // Create Fields IFieldsEdit fieldsEdit = new FieldsClass(); fieldsEdit.AddField((IField)fieldEdit); // Create Field Error Enumerator IEnumFieldError enumFieldError = null; IFields fieldsFixed = null; // Validate Field Name fieldChecker.ValidateField(0, (IFields)fieldsEdit, out enumFieldError, out fieldsFixed); // Get Validated Name (if any) string newName = null; if (fieldsFixed != null) { IField fieldFixed = fieldsFixed.get_Field(0); newName = fieldFixed.Name; } // Get Errors (if any) if (enumFieldError != null) { enumFieldError.Reset(); IFieldError fieldError = enumFieldError.Next(); if (fieldError != null) { switch (fieldError.FieldError) { case esriFieldNameErrorType.esriDuplicatedFieldName: message = "is duplicated"; return(false); case esriFieldNameErrorType.esriInvalidCharacter: message = "contains one or more invalid characters"; return(false); case esriFieldNameErrorType.esriInvalidFieldNameLength: message = "is too long"; return(false); case esriFieldNameErrorType.esriNoFieldError: message = "has no field error"; return(false); case esriFieldNameErrorType.esriSQLReservedWord: message = "contains one or more reserved word"; return(false); default: message = "contains an unknown error"; return(false); } } } // The FieldChecker may have renamed the field without returning an error. if (newName != null) { if (newName != name) { message = "has an invalid field name"; return(false); } } // No Errors message = null; return(true); }
/// <summary> /// convert featureclass in shapefile /// </summary> /// <param name="sourceWorkspace">oggetto workspace</param> /// <param name="outputName">nome feature class e nome shapefile</param> /// <param name="targetWorkspacePath">cartella shapefile</param> /// <param name="errorField">lista degli eventuali errori nella creazione dei campi</param> /// <param name="invalidObject">lista degli eventuale errori di creazione record</param> private void ConvertFeatureClassToShapefile(IWorkspace sourceWorkspace, string outputName, string targetWorkspacePath, ref List <string> errorField, ref List <string> invalidObject) { IWorkspace targetWorkspace = null; try { Type factoryType = Type.GetTypeFromProgID("esriDataSourcesFile.ShapefileWorkspaceFactory"); IWorkspaceFactory targetWorkspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType); targetWorkspace = targetWorkspaceFactory.OpenFromFile(targetWorkspacePath, 0); // Cast the workspaces to the IDataset interface and get name objects. IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace; IDataset targetWorkspaceDataset = (IDataset)targetWorkspace; IName sourceWorkspaceDatasetName = sourceWorkspaceDataset.FullName; IName targetWorkspaceDatasetName = targetWorkspaceDataset.FullName; IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDatasetName; IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDatasetName; // Create a name object for the shapefile and cast it to the IDatasetName interface. IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass(); IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureClassName; sourceDatasetName.Name = outputName; sourceDatasetName.WorkspaceName = sourceWorkspaceName; // Create a name object for the FGDB feature class and cast it to the IDatasetName interface. IFeatureClassName targetFeatureClassName = new FeatureClassNameClass(); IDatasetName targetDatasetName = (IDatasetName)targetFeatureClassName; targetDatasetName.Name = outputName; targetDatasetName.WorkspaceName = targetWorkspaceName; // Open source feature class to get field definitions. IName sourceName = (IName)sourceFeatureClassName; IFeatureClass sourceFeatureClass = (IFeatureClass)sourceName.Open(); // Create the objects and references necessary for field validation. IFieldChecker fieldChecker = new FieldCheckerClass(); IFields sourceFields = sourceFeatureClass.Fields; IFields targetFields = null; IEnumFieldError enumFieldError = null; // Set the required properties for the IFieldChecker interface. fieldChecker.InputWorkspace = sourceWorkspace; fieldChecker.ValidateWorkspace = targetWorkspace; // Validate the fields and check for errors. fieldChecker.Validate(sourceFields, out enumFieldError, out targetFields); if (enumFieldError != null) { IFieldError fieldError = null; enumFieldError.Reset(); while ((fieldError = enumFieldError.Next()) != null) { errorField.Add($"Errore: {Enum.GetName(typeof(esriFieldNameErrorType), fieldError.FieldError)} - Campo: {targetFields.get_Field(fieldError.FieldIndex).Name}"); } } // Find the shape field. string shapeFieldName = sourceFeatureClass.ShapeFieldName; int shapeFieldIndex = sourceFeatureClass.FindField(shapeFieldName); IField shapeField = sourceFields.get_Field(shapeFieldIndex); // Get the geometry definition from the shape field and clone it. IGeometryDef geometryDef = shapeField.GeometryDef; IClone geometryDefClone = (IClone)geometryDef; IClone targetGeometryDefClone = geometryDefClone.Clone(); IGeometryDef targetGeometryDef = (IGeometryDef)targetGeometryDefClone; // Create the converter and run the conversion. IFeatureDataConverter featureDataConverter = new FeatureDataConverterClass(); IEnumInvalidObject enumInvalidObject = featureDataConverter.ConvertFeatureClass(sourceFeatureClassName, null, null, targetFeatureClassName, targetGeometryDef, targetFields, string.Empty, 1000, 0); // Check for errors. IInvalidObjectInfo invalidObjectInfo = null; enumInvalidObject.Reset(); while ((invalidObjectInfo = enumInvalidObject.Next()) != null) { invalidObject.Add($"{invalidObjectInfo.InvalidObjectID}"); } } catch { throw; } finally { if (targetWorkspace != null) { Marshal.FinalReleaseComObject(targetWorkspace); } } }
//不剪裁输出 private void notcutExport(IFeatureClass pFromFeaCls, IFeatureClass pToFeatureClass, DateTime dt, string strUser, ref int intSucCount, ref string strError) { try { strError = ""; intSucCount = 0; int intCount = pFromFeaCls.FeatureCount(null); IFeatureCursor pCursor = pFromFeaCls.Search(null, false); IFeature pFeature = pCursor.NextFeature(); IFeatureCursor pFeatureCursor = pToFeatureClass.Insert(true); IFeatureBuffer pFeatureBuffer = pToFeatureClass.CreateFeatureBuffer(); OnInitProBarChangHandler(intCount); OnLblChange("正在复制:" + pFromFeaCls.AliasName); int iCount = 0; while (pFeature != null) { for (int i = 0; i < pFeature.Fields.FieldCount; i++) { string sFieldName = pFeature.Fields.get_Field(i).Name; int iIndex = pFeatureBuffer.Fields.FindField(sFieldName); if ((iIndex > -1) && (pFeatureBuffer.Fields.get_Field(iIndex).Editable == true)) { pFeatureBuffer.set_Value(iIndex, pFeature.get_Value(i)); } } if (pEnumFieldError != null)//yjl20110804 add { pEnumFieldError.Reset(); IFieldError pFieldError = pEnumFieldError.Next(); while (pFieldError != null) { int srcIx = pFieldError.FieldIndex; //错误字段的源索引 int desIx = pFeatureBuffer.Fields.FindField(pFixedField.get_Field(srcIx).Name); //错误字段的新索引 if (desIx == -1) { pFieldError = pEnumFieldError.Next(); continue; } IField pFld = pFeatureBuffer.Fields.get_Field(desIx); if ((desIx > -1) && (pFld.Editable == true) && pFld.Type != esriFieldType.esriFieldTypeGeometry) { pFeatureBuffer.set_Value(desIx, pFeature.get_Value(srcIx)); } pFieldError = pEnumFieldError.Next(); } } ////插入日期和入库人 //int intDateIndex = pFeatureBuffer.Fields.FindField("ImportTime"); //if (intDateIndex > -1) pFeatureBuffer.set_Value(intDateIndex, dt); //int intUserIndex = pFeatureBuffer.Fields.FindField("ImportUser"); //if (intUserIndex > -1) pFeatureBuffer.set_Value(intUserIndex, strUser); pFeatureBuffer.Shape = pFeature.ShapeCopy; if (!InsertFea(ref pFeatureCursor, ref pFeatureBuffer)) { strError = strError + Environment.NewLine + pFeature.OID + " 无法复制"; pFeatureCursor.Flush(); iCount = 0; OnGoStepChangHandler(); pFeature = pCursor.NextFeature(); continue; } iCount++; if (iCount == 2000) { pFeatureCursor.Flush(); iCount = 0; Application.DoEvents(); } //pbCopyRows.PerformStep(); OnGoStepChangHandler(); intSucCount++; pFeature = pCursor.NextFeature(); } if (iCount > 0) { pFeatureCursor.Flush(); } System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor); pFeatureCursor = null; System.Runtime.InteropServices.Marshal.ReleaseComObject(pCursor); pCursor = null; pFeatureBuffer = null; } catch (Exception ex) { strError = strError + Environment.NewLine + ex.Message; } }
//复制要素 public static void CopyFeatureAndTran(IFeatureCursor pCursor, IFeatureClass pToFeatureClass, ITransformation inTransformation) { IFeature pFeature = pCursor.NextFeature(); IFeatureCursor pFeatureCursor = pToFeatureClass.Insert(true); int iCount = 0; while (pFeature != null) { IFeatureBuffer pFeatureBuffer = pToFeatureClass.CreateFeatureBuffer(); for (int i = 0; i < pFeature.Fields.FieldCount; i++) { string sFieldName = pFeature.Fields.get_Field(i).Name; int iIndex = pFeatureBuffer.Fields.FindField(sFieldName); if ((iIndex > -1) && (pFeatureBuffer.Fields.get_Field(iIndex).Editable == true)) { pFeatureBuffer.set_Value(iIndex, pFeature.get_Value(i)); } } if (pEnumFieldError != null)//yjl20110804 add { pEnumFieldError.Reset(); IFieldError pFieldError = pEnumFieldError.Next(); while (pFieldError != null) { int srcIx = pFieldError.FieldIndex; //错误字段的源索引 int desIx = pFeatureBuffer.Fields.FindField(pFixedField.get_Field(srcIx).Name); //错误字段的新索引 if (desIx == -1) { pFieldError = pEnumFieldError.Next(); continue; } IField pFld = pFeatureBuffer.Fields.get_Field(desIx); if ((desIx > -1) && (pFld.Editable == true) && pFld.Type != esriFieldType.esriFieldTypeGeometry) { pFeatureBuffer.set_Value(desIx, pFeature.get_Value(srcIx)); } pFieldError = pEnumFieldError.Next(); } } IGeometry shpTransformed = pFeature.ShapeCopy; ITransform2D pTransform2D = shpTransformed as ITransform2D; pTransform2D.Transform(esriTransformDirection.esriTransformForward, inTransformation); pFeatureBuffer.Shape = shpTransformed; pFeatureCursor.InsertFeature(pFeatureBuffer); if (iCount == 500) { pFeatureCursor.Flush(); iCount = 0; } iCount++; pFeature = pCursor.NextFeature(); } if (iCount > 0) { pFeatureCursor.Flush(); } System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor); pFeatureCursor = null; }
public static void ExtractSelectFeatureFormLayer(IFeatureLayer ifeatureLayer_0, IFeatureWorkspace ifeatureWorkspace_0, IGeometry igeometry_0) { try { IFeatureSelection featureSelection = (IFeatureSelection)ifeatureLayer_0; if (featureSelection.SelectionSet.Count != 0) { IFeatureClass featureClass = ifeatureLayer_0.FeatureClass; IFields fields = featureClass.Fields; IFieldChecker fieldChecker = new FieldChecker(); fieldChecker.InputWorkspace = (featureClass as IDataset).Workspace; fieldChecker.ValidateWorkspace = (ifeatureWorkspace_0 as IWorkspace); IEnumFieldError enumFieldError; IFields fields2; fieldChecker.Validate(fields, out enumFieldError, out fields2); enumFieldError.Reset(); IFieldError fieldError = enumFieldError.Next(); string text = ""; while (fieldError != null) { fieldError.FieldError.ToString(); IField field = fields.get_Field(fieldError.FieldIndex); IField field2 = fields2.get_Field(fieldError.FieldIndex); string text2 = text; text = string.Concat(new string[] { text2, field2.Name, " reason: ", field.Name, " " }); fieldError = enumFieldError.Next(); } new Hashtable(); string text3 = ifeatureLayer_0.Name; string text4; fieldChecker.ValidateTableName(text3, out text4); text3 = text4; string shapeFieldName = ""; IFieldsEdit fieldsEdit = new Fields() as IFieldsEdit; for (int i = fields2.FieldCount - 1; i >= 0; i--) { IField field3 = fields2.get_Field(i); if (field3.Type == esriFieldType.esriFieldTypeGeometry) { shapeFieldName = field3.Name; IGeometryDef geometryDef = field3.GeometryDef; ISpatialReference spatialReference = (geometryDef.SpatialReference as IClone).Clone() as ISpatialReference; SpatialReferenctOperator.ChangeCoordinateSystem(ifeatureWorkspace_0 as IGeodatabaseRelease, spatialReference, false); (geometryDef as IGeometryDefEdit).SpatialReference_2 = spatialReference; (field3 as IFieldEdit).GeometryDef_2 = geometryDef; } if ((ifeatureWorkspace_0 as IWorkspace).Type == esriWorkspaceType.esriFileSystemWorkspace) { if (field3.Type != esriFieldType.esriFieldTypeBlob) { fieldsEdit.AddField(field3); } } else { fieldsEdit.AddField(field3); } } IFeatureClass featureClass2 = null; try { featureClass2 = ifeatureWorkspace_0.CreateFeatureClass(text3, fieldsEdit, null, null, esriFeatureType.esriFTSimple, shapeFieldName, ""); } catch (Exception) { System.Windows.Forms.MessageBox.Show("无法创建输出要素类!"); return; } IFeatureCursor featureCursor = featureClass2.Insert(true); IFeatureBuffer featureBuffer = featureClass2.CreateFeatureBuffer(); ICursor cursor; featureSelection.SelectionSet.Search(null, false, out cursor); IFeatureCursor featureCursor2 = (IFeatureCursor)cursor; for (IFeature feature = featureCursor2.NextFeature(); feature != null; feature = featureCursor2.NextFeature()) { if (feature.Shape != null) { ClipHelper.InsertFeature(featureCursor, featureBuffer, fields2, feature, feature.Shape, igeometry_0); } } featureCursor.Flush(); Marshal.ReleaseComObject(featureBuffer); Marshal.ReleaseComObject(featureCursor); } } catch { } }
//public static ICursor UncheckGridCode(ITable pTable,string pVersionName) //{ // //根据表格数据获取grid code: // IQueryFilter filter = new QueryFilterClass(); // filter.WhereClause = "TaskName = '" + pVersionName + "'"; // ICursor cursor = pTable.Search(filter, true); // return cursor; //} //public static void Check(IFeature pFeature, IWorkspace pWorkspace,string pVersionName) //{ // //更新检查状态: // int ii = 1; // int fieldindex = pFeature.Fields.FindField("passed"); // if (pFeature.get_Value(pFeature.Fields.FindField("VersionName")).ToString() == pVersionName) // { // pFeature.set_Value(fieldindex, ii); // pFeature.Store(); // } //} //public static void Check(IFeature pFeature, IWorkspace pWorkspace) //{ // //更新检查状态: // int ii = 1; // int fieldindex = pFeature.Fields.FindFieldByAliasName("Pass"); // pFeature.set_Value(fieldindex, ii); // pFeature.Store(); //} public static bool ExportSHP(string pDestPath, IWorkspace pWorkspace) { IWorkspace sourceWorkspace = pWorkspace; IFeatureClass sourceFeatureClass = DBOperator.getFeatureClass(pWorkspace, "CheckArea"); string shpFolderPath = pDestPath.Substring(0, pDestPath.LastIndexOf("\\")); string shpFileName = pDestPath.Substring(pDestPath.LastIndexOf("\\") + 1); shpFileName = shpFileName.Substring(0, shpFileName.Length - 4); IWorkspace targetWorkspace = DBOperator.openShapeFileWorkspace(shpFolderPath); if (File.Exists(pDestPath) == true) { DBOperator.DeleteFeatureClass(targetWorkspace, shpFileName); } IDataset sourcedataset = sourceWorkspace as IDataset; IWorkspaceName sourceWorkspaceName = sourcedataset.FullName as IWorkspaceName; IDataset targetdataset = targetWorkspace as IDataset; IWorkspaceName targetWorkspaceName = targetdataset.FullName as IWorkspaceName; sourcedataset = sourceFeatureClass as IDataset; IFeatureClassName sourceFeatureClassName = sourcedataset.FullName as IFeatureClassName; // Create a name object for the target dataset. IFeatureClassName targetFeatureClassName = new FeatureClassNameClass(); IDatasetName targetDatasetName = (IDatasetName)targetFeatureClassName; targetDatasetName.Name = shpFileName; targetDatasetName.WorkspaceName = targetWorkspaceName; // Create the objects and references necessary for field validation. IFieldChecker fieldChecker = new FieldCheckerClass(); IFields sourceFields = sourceFeatureClass.Fields; IFields targetFields = null; IEnumFieldError enumFieldError = null; // Validate the fields and check for errors. fieldChecker.Validate(sourceFields, out enumFieldError, out targetFields); if (enumFieldError != null) { IFieldError error = enumFieldError.Next(); while (error != null) { // Handle the errors in a way appropriate to your application. Console.WriteLine("Errors were encountered during field validation."); error = enumFieldError.Next(); } } // Find the shape field. String shapeFieldName = sourceFeatureClass.ShapeFieldName; int shapeFieldIndex = sourceFeatureClass.FindField(shapeFieldName); IField shapeField = sourceFields.get_Field(shapeFieldIndex); // Get the geometry definition from the shape field and clone it. IGeometryDef geometryDef = shapeField.GeometryDef; IClone geometryDefClone = (IClone)geometryDef; IClone targetGeometryDefClone = geometryDefClone.Clone(); IGeometryDef targetGeometryDef = (IGeometryDef)targetGeometryDefClone; // Cast the IGeometryDef to the IGeometryDefEdit interface. IGeometryDefEdit targetGeometryDefEdit = (IGeometryDefEdit)targetGeometryDef; // Set the IGeometryDefEdit properties. targetGeometryDefEdit.GridCount_2 = 1; targetGeometryDefEdit.set_GridSize(0, 0.75); // Set the required properties for the IFieldChecker interface. fieldChecker.InputWorkspace = sourceWorkspace; fieldChecker.ValidateWorkspace = targetWorkspace; // Create the converter and run the conversion. IFeatureDataConverter2 featureDataConverter = new FeatureDataConverterClass(); IDatasetName sourceFClassName = sourceFeatureClassName as IDatasetName; IEnumInvalidObject enumInvalidObject = featureDataConverter.ConvertFeatureClass (sourceFClassName, null, null, null, targetFeatureClassName, targetGeometryDef, targetFields, "", 1000, 0); // Check for errors. IInvalidObjectInfo invalidObjectInfo = null; enumInvalidObject.Reset(); while ((invalidObjectInfo = enumInvalidObject.Next()) != null) { // Handle the errors in a way appropriate to the application. Console.WriteLine("Errors occurred for the following feature: {0}", invalidObjectInfo.InvalidObjectID); return(false); } return(true); }