在回答对使用ArcGIS Desktop重新排序字段(永久)在文件地理数据库?据说可以使用“查询表”工具对表和要素类中的字段进行永久性重新排序。
但是,当我打开该工具的对话框时,看不到任何使字段重新排序的地方。我所看到的是,可以使用复选框以相同的顺序来传递或删除字段。
假设有人可以更详细地描述这些步骤,请吗?
在回答对使用ArcGIS Desktop重新排序字段(永久)在文件地理数据库?据说可以使用“查询表”工具对表和要素类中的字段进行永久性重新排序。
但是,当我打开该工具的对话框时,看不到任何使字段重新排序的地方。我所看到的是,可以使用复选框以相同的顺序来传递或删除字段。
假设有人可以更详细地描述这些步骤,请吗?
Answers:
我想出了如何使用“查询表”工具,“另存为Python代码段”,“ Python”窗口和“ 复制功能”工具来执行此操作的方法。
运行“生成查询表”工具以仅遍历我想显示在输出中的字段后,我能够将其复制为Python代码段 结果窗口进入ArcMap的Python窗口。
arcpy.MakeQueryTable_management("'C:/avhome/data/WAregional/wa regional.mdb/schools'","QueryTable","USE_KEY_FIELDS","#","schools.OBJECTID #;schools.Shape #;schools.CODE #;schools.NAME #;schools.TYPE #;schools.Y11STUDENT #;schools.Y12STUDENT #;schools.COORDGEOCO #;schools.ID #","#")
并将其编辑为:
arcpy.MakeQueryTable_management("'C:/avhome/data/WAregional/wa regional.mdb/schools'","QueryTable2","USE_KEY_FIELDS","#","schools.OBJECTID #;schools.Shape #;schools.Y12STUDENT #;schools.Y11STUDENT #;schools.NAME #","#")
请注意,新的QueryTable2保留了Shape字段(因此我可以使用CopyFeatures保留它),并且对NAME,YR11STUDENT和YR12STUDENT字段进行了重新排序。我还借此机会放弃了其他几个领域。
最后一步是使用QueryTable2上的“复制要素”工具,该工具是通过其工具对话框完成的,以创建一个新的要素类,其中的字段被永久重新排序。
使用合并工具,您可以轻松地对字段进行永久重新排序。它适用于表和要素类。可以通过python脚本甚至使用“工具”对话框来完成重新排序(通过删除字段并将其重新添加到对话框中)。尽管通过对话框重新排序不是一种完美的方法。
建议一次使用“合并”工具,然后使用“ 复制为Python代码段”,然后手动更改字段顺序,然后将python代码粘贴到python窗口中。
这是一个使用合并工具对字段进行重新排序的python脚本(从此处复制)
import arcpy
def reorder_fields(table, out_table, field_order, add_missing=True):
"""
Reorders fields in input featureclass/table
:table: input table (fc, table, layer, etc)
:out_table: output table (fc, table, layer, etc)
:field_order: order of fields (objectid, shape not necessary)
:add_missing: add missing fields to end if True (leave out if False)
-> path to output table
"""
existing_fields = arcpy.ListFields(table)
existing_field_names = [field.name for field in existing_fields]
existing_mapping = arcpy.FieldMappings()
existing_mapping.addTable(table)
new_mapping = arcpy.FieldMappings()
def add_mapping(field_name):
mapping_index = existing_mapping.findFieldMapIndex(field_name)
# required fields (OBJECTID, etc) will not be in existing mappings
# they are added automatically
if mapping_index != -1:
field_map = existing_mapping.fieldMappings[mapping_index]
new_mapping.addFieldMap(field_map)
# add user fields from field_order
for field_name in field_order:
if field_name not in existing_field_names:
raise Exception("Field: {0} not in {1}".format(field_name, table))
add_mapping(field_name)
# add missing fields at end
if add_missing:
missing_fields = [f for f in existing_field_names if f not in field_order]
for field_name in missing_fields:
add_mapping(field_name)
# use merge with single input just to use new field_mappings
arcpy.Merge_management(table, out_table, new_mapping)
return out_table
用法:
new_field_order = ["field2", "field3", "field1"]
reorder_fields(in_fc, out_fc, new_field_order)
阅读了本章“ 更改表中属性的顺序并尝试重新排列字段的顺序”之后,我在ArcMap 10,1中发现了这个简单的解决方案...