Exemplo n.º 1
0
 def updateFc(self, fc):
     '''
 更新要素类
     '''
     flag = False
     if isinstance(fc, AIFc):
         name = fc.getName()
         nalias = fc.getAlias() #新字段别名集合
         nFields = fc.getFields() #新字段集合
         nFieldNames = [nfld.getName() for nfld in nFields] #新字段名集合
         if not AIUtils.isEmpty(name):
             if arcpy.Exists(name):
                 ofc = self.queryFc(fc)
                 oalias = ofc.getAlias() # 旧字段别名集合
                 oFields = ofc.getFields() # 旧字段集合
                 oFieldNames = [ofld.getName() for ofld in oFields] #旧字段名集合
                 try:
                     # 更改别名
                     if not AIUtils.isEmpty(nalias) and not AIStrUtils.isEqual(oalias, nalias):
                         arcpy.AlterAliasName(name, nalias)
                     # 比对字段
                     # 删除字段(排除保留字段)
                     for ofn in oFieldNames:
                         if ofn not in nFieldNames and \
                         not AIStrUtils.isEqual(ofn, 'OBJECTID') and \
                         not AIStrUtils.isEqual(ofn, 'NAME') and \
                         not AIStrUtils.isEqual(ofn, 'SHAPE') and \
                         not 'AREA' in ofn and \
                         not 'LEN' in ofn:
                             arcpy.DeleteField_management(name, ofn)
                             
                     # 添加字段(排除保留字段)
                     for nfn in nFieldNames:
                         if nfn not in oFieldNames:
                             fldName = AIStrUtils.toUpper(nfn)
                             if not AIStrUtils.isEqual(fldName, 'OBJECTID') and \
                                 not AIStrUtils.isEqual(fldName, 'NAME') and \
                                 not AIStrUtils.isEqual(fldName, 'SHAPE') and \
                                 not 'AREA' in fldName and \
                                 not 'LEN' in fldName:
                                 # 需要添加的字段
                                 field = None
                                 # 查找需要添加的字段
                                 for nfld in nFields:
                                     if AIStrUtils.isEqual(nfld.getName(), nfn):
                                         field = nfld
                                         break
                                 # 字段名
                                 fldName = arcpy.ValidateFieldName(fldName, self.__wksName)
                                 # 字段别名
                                 fldAlias = field.getAlias()
                                 # 字段类型 Integer--LONG  Double--DOUBLE  String--TEXT Date--DATE
                                 fldType = AIStrUtils.toUpper(AIStrUtils.trim(field.getFtype()))
                                 fldType = 'LONG' if AIStrUtils.isEqual(fldType, 'INTEGER') else \
                                 'TEXT' if AIStrUtils.isEqual(fldType, 'STRING') else fldType
                                 # 字段小数点位数(浮点型)
                                 fldScale = field.getScale()
                                 # 字段长度(文本型)
                                 fldLength = field.getLength()
                                 # 字段是否允许为空
                                 fldIsNullable = field.getIsNullable()
                                 
                                 arcpy.AddField_management(name, fldName, fldType, None, fldScale, \
                                                           fldLength, fldAlias, fldIsNullable, False)
                         
                     flag = True
                 except:
                     raise
             else:
                 raise Exception('featureclass not exist!')
         else:
             raise Exception('featureclass name cannot be empty!')
     else:
         raise Exception('input parameter type not correct!')
 
     return flag
Exemplo n.º 2
0
                             not 'AREA' in fldName and \
                             not 'LEN' in fldName:
                             # 需要添加的字段
                             field = None
                             # 查找需要添加的字段
                             for nfld in nFields:
                                 if AIStrUtils.isEqual(nfld['name'], nfn):
                                     field = nfld
                                     break
                             keys = field.keys()
                             # 字段名
                             fldName = arcpy.ValidateFieldName(fldName, wksName)
                             # 字段别名
                             fldAlias = fldName if not 'alias' in keys else field['alias']
                             # 字段类型 Integer--LONG  Double--DOUBLE  String--TEXT Date--DATE
                             fldType = AIStrUtils.toUpper(AIStrUtils.trim(None if not 'ftype' in keys else field['ftype']))
                             fldType = 'LONG' if AIStrUtils.isEqual(fldType, 'INTEGER') else \
                             'TEXT' if AIStrUtils.isEqual(fldType, 'STRING') else fldType
                             # 字段小数点位数(浮点型)
                             fldScale = 0 if not 'scale' in keys else field['scale']
                             # 字段长度(文本型)
                             fldLength = 50 if not 'length' in keys else field['length']
                             # 字段是否允许为空
                             fldIsNullable = True if not 'isNullable' in keys else field['isNullable']
                             
                             arcpy.AddField_management(fcName, fldName, fldType, None, fldScale, \
                                                       fldLength, fldAlias, fldIsNullable, False)
                         
         flag = 'true'
 except Exception as e:            
     logger.info(unicode(e.message).encode("utf-8"))