概要
The FieldMap object provides a field definition and a list of input fields taken from a set of tables or feature classes.
ディスカッション
FieldMappings オブジェクトは FieldMap オブジェクトのコレクションで、[マージ (Merge)] などのフィールド マッピングを実行するツールのパラメーター値として使用されます。これらのオブジェクトを操作する最も簡単な方法は、まず FieldMappings オブジェクトを作成した後、結合対象の入力フィーチャクラスまたはテーブルを追加することにより、そのオブジェクトの FieldMap オブジェクトを初期化することです。すべての入力が指定された後、FieldMappings オブジェクトには、そのすべての入力の一意なフィールド名ごとに FieldMap オブジェクトまたは出力フィールドを 1 つずつ含まれます。このリストは、新しいフィールドを追加する、出力フィールドのプロジェクトまたは内容を変更する、必要のない出力フィールドを削除することにより、変更できます。
FieldMap オブジェクトのプロパティには、入力テキスト値の開始位置と終了位置が含まれるため、入力値の一部を使って新しい出力値を作成することができます。FieldMap オブジェクトに同じテーブルまたはフィーチャクラスからの複数入力フィールドが含まれる場合、各レコードの値は mergeRule プロパティを使用してマージされます。これは、たとえば「国道」と「1 号」のように、道路タイプが含まれているフィールドと道路名が含まれているフィールドの値を結合するのに役立ちます。FieldMap の joinDelimiter プロパティは、mergeRule の値として Join が指定されている場合に使用されます。スペースなど、任意の文字のセットを区切り文字として使用できます。前記の例では、「国道 1 号」という値が作成されます。
構文
FieldMap ()
プロパティ
プロパティ | 説明 | データ タイプ |
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. |
手法
addInputField (table_dataset, field_name, {start_position}, {end_position})
パラメーター | 説明 | データ タイプ |
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 |
findInputFieldIndex (table_dataset, field_name)
パラメーター | 説明 | データ タイプ |
table_dataset | The table added to the field map. | String |
field_name | The field name. | String |
戻り値
データ タイプ | 説明 |
Integer | The index position of the field name. |
getEndTextPosition (index)
パラメーター | 説明 | データ タイプ |
index | The index position. | Integer |
戻り値
データ タイプ | 説明 |
Integer | The end text position. |
getInputFieldName (index)
パラメーター | 説明 | データ タイプ |
index | The index position. | Integer |
戻り値
データ タイプ | 説明 |
String | The input field name. |
getInputTableName (index)
パラメーター | 説明 | データ タイプ |
index | The index position. | Integer |
戻り値
データ タイプ | 説明 |
String | The input table name. |
getStartTextPosition (index)
パラメーター | 説明 | データ タイプ |
index | The index position. | Integer |
戻り値
データ タイプ | 説明 |
Integer | The start text position. |
removeAll ()
removeInputField (index)
パラメーター | 説明 | データ タイプ |
index | The index position. | Integer |
setEndTextPosition (index, end_position)
パラメーター | 説明 | データ タイプ |
index | The index position. | Integer |
end_position | The end position of an input text value. | Integer |
setStartTextPosition (index, start_position)
パラメーター | 説明 | データ タイプ |
index | The index position. | Integer |
start_position | The start position of an input text value. | Integer |
コードのサンプル
FieldMap example
FieldMap objects are often used when there is a need to merge similar datasets into one, all-encompassing dataset. In this example, the feature class Trees and the shapefile Plants.shp are merged into one feature class: Vegetation. Both original feature classes have two attributes: Type and Diameter. These two attributes must be maintained through the merge.
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)
FieldMap example 2
This sample displays the option of using FieldMap objects to merge fields, using the FeatureClassToFeatureClass tool. In this example, a feature class contains information about the number of accidents per intersection in a city. Each year of data is maintained in one field. The user would like to find the average number of accidents in each intersection, without altering the existing table.
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)