概要
The FieldMap object provides a field definition and a list of input fields taken from a set of tables or feature classes.
ディスカッション
FieldMap オブジェクトのプロパティには、入力テキスト値の開始位置と終了位置が含まれるため、入力値の一部を使って出力値を作成することができます。FieldMap オブジェクトに同じテーブルまたはフィーチャクラスからの複数入力フィールドが含まれる場合、各レコードの値は mergeRule プロパティを使用してマージされます。これは、たとえば「国道」と「1 号」のように、道路タイプが含まれているフィールドと道路名が含まれているフィールドの値を結合するのに役立ちます。FieldMap の joinDelimiter プロパティは、mergeRule の値として Join が指定されている場合に使用されます。スペースなど、任意の文字のセットを区切り文字として使用できます。前記の例では、「国道 1 号」という値が作成されます。
FieldMappings オブジェクトは FieldMap オブジェクトのコレクションで、[マージ (Merge)] などのフィールド マッピングを実行するツールのパラメーター値として使用されます。これらのオブジェクトを操作する最も簡単な方法は、まず FieldMappings オブジェクトを作成した後、結合対象の入力フィーチャクラスまたはテーブルを追加することにより、そのオブジェクトの FieldMap オブジェクトを初期化することです。すべての入力が指定された後、FieldMappings オブジェクトには、そのすべての入力の一意なフィールド名ごとに FieldMap オブジェクトまたは出力フィールドを 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 オブジェクトは、類似するデータセットを 1 つの包括的なデータセットにマージするために使用されます。この例では、フィーチャクラス「Trees」とシェープファイル「Plants.shp」が 1 つのフィーチャクラス「Vegetation」にマージされます。いずれも元のフィーチャクラスには「Type」と「Diameter」の 2 つの属性があります。これらの 2 つの属性は、マージの際に維持される必要があります。
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 オブジェクトを使用してフィールドをマージするオプションが表示されます。この例では、フィーチャクラスに都市の交差点ごとの事故数に関する情報が含まれています。各年のデータは 1 つのフィールドに保持されます。ユーザーは、既存のテーブルを変更することなく、各交差点の平均事故数を検索するとします。
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)