FieldMap (arcpy)
Резюме
Объект FieldMap задает определение поля и список входных полей из набора таблиц или классов пространственных объектов.
Обсуждение
Объект FieldMappings представляет собой набор объектов FieldMap и используется как значение параметра для инструментов, выполняющих сопоставление полей; к таким инструментам относится, в частности, инструмент Слияние (Merge). Проще всего с этими объектами работать следующим образом — сначала создать объект FieldMappings, а затем инициализировать его объекты FieldMap посредством добавления входных классов объектов или таблиц, которые необходимо с ним соединить. Когда будут заданы все входные данные, объект FieldMappings будет содержать один объект FieldMap или выходное поле для каждого уникального имени поля из всех входных данных. Этот список можно изменять, добавляя в него новые поля, изменяя свойства и/или содержимое выходного поля или удаляя из него ненужные выходные поля.
Свойства объекта FieldMap включают начальное и конечное положения входного текстового значения, поэтому новое выходное значение можно создать с использованием лишь части входного значения. Если объект FieldMap содержит несколько входных полей из одной таблицы или класса объектов, то значения каждой записи объединяются с помощью свойства mergeRule. Этот способ удобен для объединения таких значений, как название улицы из одного поля и тип улицы из другого поля, например: Eureka и Street. Свойство joinDelimiter объекта FieldMap применяется, если для mergeRule задано значение Join. Любой набор символов, например, пробел, можно использовать в качестве разделителя. В приведенном выше примере, таким образом, будет создано значение Eureka Street.
Синтаксис
Свойства
Свойство | Объяснение | Тип данных |
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) |
Получает начальное текстовое положение из списка полей. |
removeAll () |
Удаляет все значения и создает пустой объект. |
removeInputField (index) |
Удаляет входное поле в списке полей. |
setEndTextPosition (index, end_position) |
Устанавливает конечное текстовое положение для списка полей. |
setStartTextPosition (index, start_position) |
Устанавливает начальное текстовое положение из списка полей. |
Методы
Параметр | Объяснение | Тип данных |
table_dataset |
Таблица, которая будет добавлена к списку полей. | String |
field_name |
Имя входного поля. | String |
start_position |
Начальное положение входного текстового значения. (Значение по умолчанию — -1) | Integer |
end_position |
Конечное положение входного текстового значения. (Значение по умолчанию — -1) | Integer |
Параметр | Объяснение | Тип данных |
table_dataset |
Таблица, которая будет добавлена к списку полей. | String |
field_name |
Имя поля. | String |
Тип данных | Объяснение |
Integer |
Значение индекса имени поля. |
Параметр | Объяснение | Тип данных |
index |
Значение индекса. | Integer |
Тип данных | Объяснение |
Integer |
Конечное положение текста. |
Параметр | Объяснение | Тип данных |
index |
Значение индекса. | Integer |
Тип данных | Объяснение |
String |
Имя входного поля. |
Параметр | Объяснение | Тип данных |
index |
Значение индекса. | Integer |
Тип данных | Объяснение |
String |
Имя входная таблицы. |
Параметр | Объяснение | Тип данных |
index |
Значение индекса. | Integer |
Тип данных | Объяснение |
Integer |
Начальное положение текста. |
Параметр | Объяснение | Тип данных |
index |
Значение индекса. | Integer |
Параметр | Объяснение | Тип данных |
index |
Значение индекса. | Integer |
end_position |
Конечное положение входного текстового значения. | Integer |
Параметр | Объяснение | Тип данных |
index |
Значение индекса. | Integer |
start_position |
Начальное положение входного текстового значения. | Integer |
Пример кода
ОбъектыFieldMap часто используются, когда требуется соединить наборы со схожими данными в один всеохватывающий набор данных. В этом примере класс пространственных объектов Trees (деревья) и шейп-файл Plants.shp (растения) соединяются в один класс пространственных объектов Vegetation (растительность). Атрибутами обоих исходных классов пространственных объектов являются : Тип (Type) и Диаметр (Diameter). В результате соединения оба эти атрибута должны быть сохранены.
# Import the arcpy module.
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 с помощью инструмента FeatureClassToFeatureClass (класс объектов в класс объектов). В этом примере класс объектов содержит информацию о количестве дорожных происшествий в городе в расчете на один перекресток. Каждый год данные сохраняются в одном поле. Пользователю требуется найти среднее количество происшествий на каждом перекрестке, не изменяя имеющейся таблицы.
# Import the arcpy module
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 f in arcpy.ListFields(in_file, 'Yr*'):
fm.addInputField(in_file, f.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, "", fms)