ArcGIS Engine代码共享-要素(Feature)操作

来源:互联网 发布:大数据的就业前景 编辑:程序博客网 时间:2024/03/29 21:12
public class FeatureHelper    {       public static void CopyFeature(IFeature pSrcFea, IFeature pDestFea)       {           CopyFeature(pSrcFea, pDestFea, true);       }       public static void CopyFeature(IFeature pSrcFea, IFeature pDestFea, bool pOverwrite)       {           try           {               IFeatureClass class2 = pSrcFea.Table as IFeatureClass;               IFeatureClass class3 = pDestFea.Table as IFeatureClass;               int num = pSrcFea.Fields.FieldCount;               for (int i = 0; i < num; i++)               {                   IField field = class2.Fields.get_Field(i);                   if ((((field.Type != esriFieldType.esriFieldTypeOID) &&                       (field.Type != esriFieldType.esriFieldTypeGeometry))                        && (field != class2.LengthField)) && (field != class2.AreaField))                   {                       string str = field.Name.ToUpper();                       int num3 = class3.Fields.FindField(str);                       if (num3 >= 0)                       {                           IField field2 = class3.Fields.get_Field(num3);                           if ((((field2.Type != esriFieldType.esriFieldTypeOID) &&                       (field2.Type != esriFieldType.esriFieldTypeGeometry))                       && (field2 != class3.LengthField)) && (field2 != class3.AreaField))                           {                               object obj2 = pSrcFea.get_Value(i);                               if (pOverwrite)                               {                                   if ((obj2 == null) || (obj2 is DBNull))                                   {                                       obj2 = null;                                   }                                   if (field2.CheckValue(obj2))                                   {                                       try                                       {                                           pDestFea.set_Value(num3, obj2);                                       }                                       catch                                       {                                       }                                   }                               }                               else                               {                                   object obj3 = pDestFea.get_Value(num3);                                   if ((obj3 == null) || (obj3 is DBNull))                                   {                                       if ((obj2 == null) || (obj2 is DBNull))                                       {                                           obj2 = null;                                       }                                       if (field2.CheckValue(obj2))                                       {                                           try                                           {                                               pDestFea.set_Value(num3, obj2);                                           }                                           catch                                           {                                           }                                       }                                   }                               }                           }                       }                   }               }               pDestFea.Store();           }           catch (Exception)           {           }       }       public static void CopyRow(IRow pSrcFea, IRow pDestFea)       {           try           {               ITable table = pSrcFea.Table;               ITable table2 = pDestFea.Table;               IField field = null;               IField field2 = null;               IField field3 = null;               IField field4 = null;               if (table is IFeatureClass)               {                   field = (table as IFeatureClass).LengthField;                   field2 = (table as IFeatureClass).AreaField;               }               if (table2 is IFeatureClass)               {                   field3 = (table2 as IFeatureClass).LengthField;                   field4 = (table2 as IFeatureClass).AreaField;               }               int num = pSrcFea.Fields.FieldCount;               for (int i = 0; i < num; i++)               {                   IField field5 = table.Fields.get_Field(i);                   if ((((field5.Type != esriFieldType.esriFieldTypeOID)                        && (field5.Type != esriFieldType.esriFieldTypeGeometry)) && (field5 != field)) && (field5 != field2))                   {                       string str = field5.Name.ToUpper();                       object obj2 = pSrcFea.get_Value(i);                       if ((obj2 != null) || (obj2 is DBNull))                       {                           int num3 = table2.Fields.FindField(str);                           if (num3 >= 0)                           {                               IField field6 = table2.Fields.get_Field(num3);                               if (((((field6.Type != esriFieldType.esriFieldTypeOID) &&                                    (field6.Type != esriFieldType.esriFieldTypeGeometry)) && (field6 != field3)) && (field6 != field4)) && (((obj2 != null) && !(obj2 is DBNull)) && field6.CheckValue(obj2)))                               {                                   try                                   {                                       pDestFea.set_Value(num3, obj2);                                   }                                   catch                                   {                                   }                               }                           }                       }                   }               }               pDestFea.Store();           }           catch (Exception)           {           }       }       public static void CopyRow(IRow pSrcFea, IRow pDestFea, List<int> pSrcField, List<int> pDestField)       {           for (int i = 0; i < pSrcField.Count; i++)           {               int num2 = pSrcField[i];               int num3 = pDestField[i];               if ((num2 >= 0) && (num3 >= 0))               {                   try                   {                       object obj2 = pSrcFea.get_Value(num2);                       IField field = pDestFea.Fields.get_Field(num3);                       if (((obj2 != null) && !(obj2 is DBNull)) && field.CheckValue(obj2))                       {                           try                           {                               pDestFea.set_Value(num3, obj2);                           }                           catch                           {                           }                       }                   }                   catch (Exception exception)                   {                       string message = exception.Message;                   }               }           }       }       public static void CopyTable(ITable pSrcTable, ITable pDestTable)       {           Exception exception;           try           {               if ((pSrcTable != null) && (pDestTable != null))               {                   List<int> pSrcField = null;                   List<int> pDestField = null;                   CreateFieldMap(pSrcTable, pDestTable, out pSrcField, out pDestField);                   ICursor o = pSrcTable.Search(null, true);                   int num = pSrcTable.RowCount(null);                   if (num > 0)                   {                       int num2 = (num / 10) + 1;                       IWorkspaceEdit edit = (pDestTable as IDataset).Workspace as IWorkspaceEdit;                       edit.StartEditing(false);                       edit.StartEditOperation();                       IRow pSrcFea = o.NextRow();                       int num3 = 1;                       while (pSrcFea != null)                       {                           try                           {                               if ((num2 >= 0x3e8) && ((num3++ % num2) == 0))                               {                                   edit.StopEditOperation();                                   edit.StopEditing(true);                                   edit.StartEditing(false);                                   edit.StartEditOperation();                               }                               IRow pDestFea = pDestTable.CreateRow();                               CopyRow(pSrcFea, pDestFea, pSrcField, pDestField);                               if ((pSrcFea is IFeature) && (pDestFea is IFeature))                               {                                   (pDestFea as IFeature).Shape=(pSrcFea as IFeature).ShapeCopy;                               }                               pDestFea.Store();                           }                           catch (Exception exception1)                           {                               exception = exception1;                           }                           pSrcFea = o.NextRow();                           edit.StopEditOperation();                           edit.StopEditing(true);                       }                       Marshal.ReleaseComObject(o);                   }               }           }           catch (Exception exception2)           {               exception = exception2;           }       }       public static void CreateFieldMap(ITable pSrcTable, ITable pDestTable, out List<int> pSrcField, out List<int> pDestField)       {           Exception exception;           pSrcField = new List<int>();           pDestField = new List<int>();           int num = pSrcTable.Fields.FieldCount;           IField field = null;           try           {               if (pSrcTable is IFeatureClass)               {                   field = (pSrcTable as IFeatureClass).LengthField;               }           }           catch (Exception exception1)           {               exception = exception1;           }           IField field2 = null;           try           {               if (pSrcTable is IFeatureClass)               {                   field2 = (pSrcTable as IFeatureClass).AreaField;               }           }           catch (Exception exception2)           {               exception = exception2;           }           IField field3 = null;           try           {               if (pDestTable is IFeatureClass)               {                   field3 = (pDestTable as IFeatureClass).LengthField;               }           }           catch (Exception exception3)           {               exception = exception3;           }           IField field4 = null;           try           {               if (pDestTable is IFeatureClass)               {                   field4 = (pDestTable as IFeatureClass).AreaField;               }           }           catch (Exception exception4)           {               exception = exception4;           }           for (int i = 0; i < num; i++)           {               IField field5 = pSrcTable.Fields.get_Field(i);               if ((((field5.Type != esriFieldType.esriFieldTypeOID) &&                   (field5.Type != esriFieldType.esriFieldTypeGeometry)) && (field5 != field)) && (field5 != field2))               {                   string str = field5.Name.ToUpper();                   int item = pDestTable.Fields.FindField(str);                   if (item >= 0)                   {                       IField field6 = pDestTable.Fields.get_Field(item);                       if ((((field6.Type !=esriFieldType.esriFieldTypeOID) &&                           (field6.Type != esriFieldType.esriFieldTypeGeometry)) && (field6 != field3)) && (field6 != field4))                       {                           pSrcField.Add(i);                           pDestField.Add(item);                       }                   }               }           }       }       public static double GetFeatureDoubleValue(IFeature pFea, string pField)       {           return LSCommonHelper.ConvertHelper.ObjectToDouble(GetRowValue(pFea, pField));       }       public static int GetFeatureIntValue(IFeature pFea, string pField)       {           return LSCommonHelper.ConvertHelper.ObjectToInt(GetRowValue(pFea, pField));       }       public static string GetFeatureStringValue(IFeature pFea, string pField)       {           return GetRowValue(pFea, pField).ToString();       }       public static object GetFeatureValue(IFeature pFea, string pField)       {           return GetRowValue(pFea, pField);       }       public static object GetRowValue(IRow pRow, string pField)       {           if ((pRow != null) && (pField != null))           {               int num = pRow.Fields.FindField(pField);               if (num >= 0)               {                   object obj2 = pRow.get_Value(num);                   if ((obj2 == null) || (obj2 is DBNull))                   {                       obj2 = "";                   }                   return obj2;               }           }           return "";       }       public static void SetFeatureValue(IFeature pFea, string pField, object pValue)       {           SetRowValue(pFea, pField, pValue);       }       public static void SetFeatureValue(IFeatureBuffer pFea, string pField, object pValue)       {           SetRowValue(pFea as IRow, pField, pValue);       }       public static void SetRowValue(IRow pRow, string pField, object pValue)       {           if ((pRow != null) && (pField != null))           {               int num = pRow.Fields.FindField(pField);               if (num >= 0)               {                   if ((pValue == null) || (pValue is DBNull))                   {                       pValue = "";                   }                   IField field = pRow.Fields.get_Field(num);                   if (field.CheckValue(pValue))                   {                       if ((field.Type == esriFieldType.esriFieldTypeInteger) && ((pValue == null) || (pValue.ToString() == "")))                       {                           pRow.set_Value(num, 0);                       }                       else if ((field.Type == esriFieldType.esriFieldTypeDouble) && ((pValue == null) || (pValue.ToString() == "")))                       {                           pRow.set_Value(num, 0.0);                       }                       else                       {                           pRow.set_Value(num, pValue);                       }                   }                   else                   {                       try                       {                           pRow.set_Value(num, pValue);                       }                       catch                       {                       }                   }               }           }       }    }

原创粉丝点击