摘要
FieldMap 对象提供一个字段定义和一个输入字段列表,该输入字段列表来自一组表或要素类。
说明
FieldMap 对象的属性包括输入文本值的起始位置和结束位置,因此可以使用一组输入值创建输出值。 如果 FieldMap 对象包含多个来自同一表或要素类的输入字段,则将使用 mergeRule 属性合并每个记录的值。 这是一种连接值的简便方法,例如在一个字段中保存的街道名称和在另一个字段中保存的街道类型,如 Eureka 和 Street。 当指定 Join 作为 mergeRule 值时,会使用 FieldMap 对象的 joinDelimiter 属性。 任何字符集(如空格)都可以用作分隔符。 在上方示例中,将会创建值 Eureka Street。
FieldMappings 对象是一组 FieldMap 对象,用作字段映射工具的参数值,例如合并。 要处理这些对象,最简单的方法就是先创建 FieldMappings 对象,然后通过添加要组合的输入要素类或表对 FieldMap 对象进行初始化。 提供了所有输入后,FieldMappings 对象将为所有输入中的每个唯一字段名提供一个 FieldMap 对象或输出字段。 您可以通过添加新字段、更改输出字段的属性或内容或删除不需要的输出字段来修改此列表。
语法
FieldMap ()
属性
属性 | 说明 | 数据类型 |
inputFieldCount (只读) | 所定义的输入字段的数量。 | Integer |
joinDelimiter (可读写) | 字符串值,用于在输出字段类型为字符串而 mergeRule 的值为 Join 时分隔同一个表中的输入值。 | String |
mergeRule (可读写) | 定义如何将同一输入表中的两个或多个字段值合并成单个输出值。以下为有效选项:
| String |
outputField (可读写) | 输出字段的属性在 Field 对象中进行设置或返回。 | Field |
方法概述
方法 | 说明 |
addInputField (table_dataset, field_name, {start_position}, {end_position}) | 将输入字段添加到字段映射。 |
findInputFieldIndex (table_dataset, field_name) | 从字段映射查找输入字段。 |
getEndTextPosition (index) | 返回字段映射的文本结束位置。 |
getInputFieldName (index) | 根据字段索引位置,返回字段映射中输入字段的名称。 |
getInputTableName (index) | 根据表索引位置,返回字段映射中输入表的名称。 |
getStartTextPosition (index) | 返回 FieldMap 对象的文本起始位置。 |
removeAll () | 移除所有值并创建一个空对象。 |
removeInputField (index) | 从 FieldMap 对象中移除输入字段。 |
setEndTextPosition (index, end_position) | 设置字段映射的文本结束位置。 |
setStartTextPosition (index, start_position) | 设置字段映射的文本起始位置。 |
方法
addInputField (table_dataset, field_name, {start_position}, {end_position})
参数 | 说明 | 数据类型 |
table_dataset | 要添加到字段映射中的表。 | String |
field_name | 输入字段名称。 | String |
start_position | 输入文本值的起始位置。 (默认值为 -1) | Integer |
end_position | 输入文本值的结束位置。 (默认值为 -1) | Integer |
findInputFieldIndex (table_dataset, field_name)
参数 | 说明 | 数据类型 |
table_dataset | 要添加到字段映射中的表。 | String |
field_name | 字段名称。 | String |
数据类型 | 说明 |
Integer | 字段名的索引位置。 |
getEndTextPosition (index)
参数 | 说明 | 数据类型 |
index | The index position. | Integer |
数据类型 | 说明 |
Integer | 文本结束位置。 |
getInputFieldName (index)
参数 | 说明 | 数据类型 |
index | The index position. | Integer |
数据类型 | 说明 |
String | 输入字段名称。 |
getInputTableName (index)
参数 | 说明 | 数据类型 |
index | The index position. | Integer |
数据类型 | 说明 |
String | 输入表名称。 |
getStartTextPosition (index)
参数 | 说明 | 数据类型 |
index | The index position. | Integer |
数据类型 | 说明 |
Integer | 文本起始位置。 |
removeAll ()
removeInputField (index)
参数 | 说明 | 数据类型 |
index | The index position. | Integer |
setEndTextPosition (index, end_position)
参数 | 说明 | 数据类型 |
index | 索引位置。 | Integer |
end_position | 输入文本值的结束位置。 | Integer |
setStartTextPosition (index, start_position)
参数 | 说明 | 数据类型 |
index | 索引位置。 | Integer |
start_position | 输入文本值的起始位置。 | Integer |
代码示例
要将相似数据集合并到一个无所不包的数据集中时,通常使用 FieldMap 对象。 在本例中,Trees 要素类和 Plants.shp shapefile 会合并至一个要素类:Vegetation。 两个原始要素类都具有两个属性:Type 和 Diameter。 两个属性都必须通过合并进行维护。
import arcpy
# Set the workspace
arcpy.env.workspace = 'c:/base'
in_features_1 = 'data.gdb/Trees'
in_features_2 = 'Plants.shp'
out_features = '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_features_1, tree_type)
fm_type.addInputField(in_features_2, plant_type)
fm_diam.addInputField(in_features_1, tree_diam)
fm_diam.addInputField(in_features_2, plant_diam)
# Set the output field properties for both FieldMap objects.
type_field = fm_type.outputField
type_field.name = 'Veg_Type'
fm_type.outputField = type_field
diam_field = fm_diam.outputField
diam_field.name = 'Veg_Diam'
fm_diam.outputField = diam_field
# Add the FieldMap objects to the FieldMappings object.
fms.addFieldMap(fm_type)
fms.addFieldMap(fm_diam)
# Merge the two feature classes.
arcpy.management.Merge([in_features_1, in_features_2], out_features, fms)
此示例演示了通过 ExportFeatures 工具使用 FieldMap 对象合并字段的操作。 在本示例中,要素类包含有关城市中每个十字路口的事故数量的信息。 每年的数据都保存在一个字段中。 用户希望在不更改现有表格的情况下找出每个十字路口的平均事故数量。
import arcpy
in_features = r'c:/base/data.gdb/AccidentData'
out_features = r'c:/base/data.gdb/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'.
# 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_features, 'Yr*'):
fm.addInputField(in_features, field.name)
# Set the merge rule to find the mean value of all fields in the
# FieldMap object.
fm.mergeRule = 'Mean'
# Set the properties of the output field.
out_field = fm.outputField
out_field.name = 'AvgAccidents'
out_field.aliasName = 'AvgAccidents'
fm.outputField = out_field
# Add the intersection field to the second FieldMap object.
fm1.addInputField(in_features, "Intersection")
# Add both FieldMap objects to the FieldMappings object.
fms.addFieldMap(fm)
fms.addFieldMap(fm1)
# Create the output feature class using the FieldMappings object.
arcpy.conversion.ExportFeatures(in_features, out_features, field_mapping=fms)