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
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"))