コード例 #1
0
        /// <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));
        }
コード例 #2
0
        //格式转换后,检验字段的有效性并修复字段 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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        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
            {
            }
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        /// <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);
                }
            }
        }
コード例 #7
0
ファイル: frmAppendFea.cs プロジェクト: radtek/geosufan
        //不剪裁输出
        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;
            }
        }
コード例 #8
0
        //复制要素
        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;
        }
コード例 #9
0
ファイル: ClipHelper.cs プロジェクト: secondii/Yutai
 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
     {
     }
 }
コード例 #10
0
        //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);
        }