FieldMap (arcpy)
摘要
FieldMap 对象提供一个字段定义和一个输入字段列表,该输入字段列表来自一组表或要素类。
讨论
FieldMappings 对象是一组 FieldMap 对象,它用作执行字段映射的工具的参数值,如 Merge。要处理这些对象,最简单的方法就是先创建 FieldMappings 对象,然后通过添加要组合的输入要素类或表对 FieldMap 对象进行初始化。提供了所有输入后,FieldMappings 对象将为所有输入中的每个唯一字段名提供一个 FieldMap 对象或输出字段。可对此列表进行修改,具体方法有添加新字段、更改输出字段的属性和/或内容,或移除任何不需要的输出字段。
FieldMap 对象的属性包括输入文本值的起始位置和结束位置,因此可以使用一组输入值创建新的输出值。如果 FieldMap 对象包含多个来自同一表或要素类的输入字段,则将使用 mergeRule 属性合并每个记录的值。这样可以方便地连接各个值,例如保存在一个字段中的街道名称以及保存在另一个字段中的街道类型,如 Eureka 和 Street。如果将 mergeRule 的值指定为 Join,则使用 FieldMap 的 joinDelimiter 属性。任何字符集(如空格)都可用作分隔符。在以上示例中,将会创建值 Eureka Street。
语法
属性
属性 | 说明 | 数据类型 |
inputFieldCount (只读) |
The number of defined input fields. | Integer |
joinDelimiter (读写) |
A string value used to separate input values from the same table if the output field type is string and the mergeRule is Join. | String |
mergeRule (读写) |
Defines how values from two or more fields from the same input table are merged into a single output value. Valid choices are as follows:
| String |
outputField (读写) |
The properties of the output field are either set or returned in a Field object. | Field |
方法概述
方法 | 说明 |
addInputField (table_dataset, field_name, {start_position}, {end_position}) |
Adds input field to the field map. |
findInputFieldIndex (table_dataset, field_name) |
Finds an input field from the field map. |
getEndTextPosition (index) |
Gets end text position from the field map. |
getInputFieldName (index) |
Gets the name of an input field from the field map, based on the field's index. |
getInputTableName (index) |
Gets the name of an input table from the field map, based on the table's index. |
getStartTextPosition (index) |
Gets start text position from the field map. |
removeAll () |
Removes all values and creates an empty object. |
removeInputField (index) |
Removes an input field from the field map. |
setEndTextPosition (index, end_position) |
Sets end text position for the field map. |
setStartTextPosition (index, start_position) |
Sets the start text position from the field map. |
方法
参数 | 说明 | 数据类型 |
table_dataset |
The table added to the field map. | String |
field_name |
The input field name. | String |
start_position |
The start position of an input text value. (默认值为 -1) | Integer |
end_position |
The end position of an input text value. (默认值为 -1) | Integer |
参数 | 说明 | 数据类型 |
table_dataset |
The table added to the field map. | String |
field_name |
The field name. | String |
数据类型 | 说明 |
Integer |
The index position of the field name. |
参数 | 说明 | 数据类型 |
index |
The index position. | Integer |
数据类型 | 说明 |
Integer |
The end text position. |
参数 | 说明 | 数据类型 |
index |
The index position. | Integer |
数据类型 | 说明 |
String |
The input field name. |
参数 | 说明 | 数据类型 |
index |
The index position. | Integer |
数据类型 | 说明 |
String |
The input table name. |
参数 | 说明 | 数据类型 |
index |
The index position. | Integer |
数据类型 | 说明 |
Integer |
The start text position. |
参数 | 说明 | 数据类型 |
index |
The index position. | Integer |
参数 | 说明 | 数据类型 |
index |
The index position. | Integer |
end_position |
The end position of an input text value. | Integer |
参数 | 说明 | 数据类型 |
index |
The index position. | Integer |
start_position |
The start position of an input text value. | Integer |
代码实例
需要将相似数据集合并到一个无所不包的数据集中时,通常使用 FieldMap 对象。在该示例中,要素类 Trees 和 shapefile Plants.shp 合并至一个要素类:Vegetation。两个初始要素类均有两个属性:类型与直径。两个属性都必须通过合并进行维护。
import arcpy
# Set the workspace
arcpy.env.workspace = 'c:/base'
in_file1 = 'data.gdb/Trees'
in_file2 = 'Plants.shp'
output_file = 'data.gdb/Vegetation'
# Create the required FieldMap and FieldMappings objects
fm_type = arcpy.FieldMap()
fm_diam = arcpy.FieldMap()
fms = arcpy.FieldMappings()
# Get the field names of vegetation type and diameter for both original
# files
tree_type = "Tree_Type"
plant_type = "Plant_Type"
tree_diam = "Tree_Diameter"
plant_diam = "Diameter"
# Add fields to their corresponding FieldMap objects
fm_type.addInputField(in_file1, tree_type)
fm_type.addInputField(in_file2, plant_type)
fm_diam.addInputField(in_file1, tree_diam)
fm_diam.addInputField(in_file2, plant_diam)
# Set the output field properties for both FieldMap objects
type_name = fm_type.outputField
type_name.name = 'Veg_Type'
fm_type.outputField = type_name
diam_name = fm_diam.outputField
diam_name.name = 'Veg_Diam'
fm_diam.outputField = diam_name
# Add the FieldMap objects to the FieldMappings object
fms.addFieldMap(fm_type)
fms.addFieldMap(fm_diam)
# Merge the two feature classes
arcpy.Merge_management([in_file1, in_file2], output_file, fms)
此示例使用 FeatureClassToFeatureClass 工具显示使用 FieldMap 对象合并字段的选项。在本示例中,要素类包含城市交叉点事故数量的信息。在一个字段中维护各年数据。用户想要在不更改现有表的情况下,查找各交叉点的平均事故数量。
import arcpy
# Set the workspace
arcpy.env.workspace = 'c:/base/data.gdb'
in_file = 'AccidentData'
out_file = 'AverageAccidents'
# Create the necessary FieldMap and FieldMappings objects
fm = arcpy.FieldMap()
fm1 = arcpy.FieldMap()
fms = arcpy.FieldMappings()
# Each field with accident data begins with 'Yr' (from Yr2007 to Yr2012).
# The next step loops through each of the fields beginning with 'Yr',
# and adds them to the FieldMap Object
for field in arcpy.ListFields(in_file, 'Yr*'):
fm.addInputField(in_file, field.name)
# Set the merge rule to find the mean value of all fields in the
# FieldMap object
fm.mergeRule = 'Mean'
# Set properties of the output name.
f_name = fm.outputField
f_name.name = 'AvgAccidents'
f_name.aliasName = 'AvgAccidents'
fm.outputField = f_name
# Add the intersection field to the second FieldMap object
fm1.addInputField(in_file, "Intersection")
# Add both FieldMaps to the FieldMappings Object
fms.addFieldMap(fm)
fms.addFieldMap(fm1)
# Create the output feature class, using the FieldMappings object
arcpy.FeatureClassToFeatureClass_conversion(
in_file, arcpy.env.workspace, out_file, field_mapping=fms)