Сводка
Присоединяет атрибуты из одного объекта к другому на основании пространственного взаиморасположения. В выходной класс объектов записываются целевые объекты (исходного класса) с присоединенными атрибутами из другого класса.
Использование
Пространственное соединение предполагает сопоставление строк атрибутивной таблицы Присоединяемых объектов (Join Features) и Целевых объектов (Target Features) на основании их пространственного расположения.
По умолчанию все атрибуты присоединяемых объектов присоединяются к атрибутам целевых объектов и копируются в выходной класс объектов. Можно задать, какие атрибуты будут записаны в выходной класс объектов, настроив параметр Список полей соединенных объектов (Field Map of Join Features).
Два новых поля, Join_Count и TARGET_FID, всегда добавляются к выходному классу объектов. Join_Count показывает, сколько соединенных объектов соответствуют каждому целевому объекту (TARGET_FID).
Еще одно новое поле, JOIN_FID, добавляется к выходным данным, когда для параметра Операции соединения (Join Operation) выбрано значение JOIN_ONE_TO_MANY.
Если для параметра Операции соединения (Join Operation) указано значение JOIN_ONE_TO_MANY, каждому целевому объекту в выходном классе может соответствовать более одной строки. Поле JOIN_FID облегчает определение того, к какому целевому объекту (TARGET_FID) присоединяется тот или иной объект. Значение -1 в поле JOIN_FID означает, что ни один объект не соответствует заданному пространственному отношению с целевым объектом.
Все целевые объекты исходного класса будут сохранены в выходном классе объектов, если:
- Для параметра Кардинальность соединения (Join Operation) задано JOIN_ONE_TO_ONE и
- отмечена опция Сохранить все целевые объекты (Keep All Target Features) (join_type = "KEEP_ALL" в Python).
Правила слияния, определяемые при настройке параметра Список полей соединенных объектов (Field Map of Join Features), применимы только к атрибутам присоединяемых объектов, если более одного объекта присоединяется к одному целевому объекту (когда Join_Count > 1). Например, если к одному целевому объекту присоединяются три объекта, со значениями атрибута DEPTH 15.5, 2.5, и 3.3, и используется правило слияния Среднее, в выходное атрибутивное поле будет записано значение 6.1. При статистическом расчете нулевые значения в соединяемых полях игнорируются. Например, 15,5, <null> и 2,5 дадут в результате 9,0 для Среднего (Mean) и 2 для Количества (Count).
Если для параметра Опции сопоставления (Match Option) выбрано CLOSEST или CLOSEST_GEODESIC, существует вероятность, что два или более присоединяемых объектов находятся на одинаковом расстоянии от целевого объекта. В это случае присоединен будет только один объект, выбираемый случайным образом (идентификатор присоединяемого объекта на выбор не влияет). Если вы хотите выбрать конкретный 2-й, 3-й или N-й ближайший объект, используйте инструмент Построить таблицу соседних объектов (Generate Near Table).
Если соединяемый объект имеет пространственное отношение с несколькими целевыми объектами, он учитывается столько раз, сколько он соответствует целевому объекту. Например, если точка находится внутри трех полигонов, тогда она считается три раза, по одному разу для каждого полигона.
Подробнее об использовании трехмерных пространственных отношений INTERSECT_3D и WITHIN_A_DISTANCE_3D, см. в разделе Отношения Выборка по расположению 3D.
Синтаксис
arcpy.analysis.SpatialJoin(target_features, join_features, out_feature_class, {join_operation}, {join_type}, {field_mapping}, {match_option}, {search_radius}, {distance_field_name})
Параметр | Объяснение | Тип данных |
target_features | Атрибуты целевых объектов, к которым присоединяются атрибуты присоединяемых объектов и которые будут перенесены в выходной класс объектов. Если необходимо перенести только часть атрибутов, их можно задать в списке полей. | Feature Layer |
join_features | Атрибуты, которые будут присоединены к объектам целевого класса. Дополнительные сведения о том, как тип операции соединения влияет на объединение присоединяемых атрибутов, см. в описании параметра join_operation. | Feature Layer |
out_feature_class | Новый класс пространственных объектов, содержащий атрибуты целевых и присоединяемых объектов. По умолчанию все атрибуты целевых и присоединяемых объектов записываются в целевой класс объектов. Но можно определить в списке полей поднабор атрибутов целевых и присоединяемых объектов, которые будут записаны в выходной класс объектов. | Feature Class |
join_operation (Дополнительный) | Определяет, как будут осуществляться соединения между целевыми и присоединяемыми объектами в выходном классе объектов, если найдено несколько присоединяемых объектов, которые имеют то же пространственное расположение по отношению к одному целевому объекту.
| String |
join_type (Дополнительный) | Определяет, будут ли поддерживаться в выходном классе объектов (внешнее соединение) все целевые объекты или только те, у которых имеется заданное пространственное отношение с соединяемыми объектами (внутреннее соединение).
| Boolean |
field_mapping (Дополнительный) | Контролирует, какие атрибутивные поля будут в выходном классе объектов. Список содержит все поля и целевых, и присоединяемых объектов. Поля можно добавить, удалить, переименовать или изменить их свойства. Выбранные поля переносятся из целевых объектов в неизменяемом виде, а выбранные поля из присоединяемых объектов могут объединяться в соответствии с правилом слияния. Дополнительные сведения о сопоставлении полей см. в разделах справки: Использование элемента управления сопоставлением полей и Сопоставление входных и выходных полей. Можно задать несколько полей и комбинацию статистических показателей. | Field Mappings |
match_option (Дополнительный) | Определяет критерии для сопоставления строк. Опции сопоставления:
| String |
search_radius (Дополнительный) | Расстояние от целевого объекта, в пределах которого присоединяемые объекты будут учитываться для пространственного соединения. Радиус поиска является корректным, только если для пространственного отношения (Опции сопоставления (Match Option)) задано INTERSECT, WITHIN_A_DISTANCE, WITHIN_A_DISTANCE_GEODESIC, HAVE_THEIR_CENTER_IN, CLOSEST или CLOSEST_GEODESIC. При радиусе поиска в 100 метров с пространственным отношением WITHIN_A_DISTANCE, будут присоединяться объекты, расположенные в пределах 100 метров от целевого объекта. Для трех отношений WITHIN_A_DISTANCE, если значение радиуса поиска не задано, используется дистанция 0. | Linear unit |
distance_field_name (Дополнительный) | Имя поля, которое будет добавлено в выходной класс объектов и в котором будет информация о расстоянии между целевым объектом и ближайшим присоединяемым объектом. Эта опция является корректной, только если задано пространственное отношение (Опции сопоставления) CLOSEST или CLOSEST_GEODESIC. Значения в этом поле равно -1, если в пределах радиуса поиска не найдено подходящего объекта. Если не указано имя поля, это поле не будет добавлено в выходной класс объектов. | String |
Пример кода
SpatialJoin, пример 1 (окно Python)
Пример скрипта Python для использования функции SpatialJoin.
import arcpy
target_features = "C:/data/usa.gdb/states"
join_features = "C:/data/usa.gdb/cities"
out_feature_class = "C:/data/usa.gdb/states_cities"
arcpy.SpatialJoin_analysis(target_features, join_features, out_feature_class)
SpatialJoin, gример 2 (автономный скрипт)
Пример автономного скрипта Python для использования функции SpatialJoin для соединения атрибутов городов и районов.
# Name: SpatialJoin_Example2.py
# Description: Join attributes of cities to states based on spatial relationships.
# Requirements: os module
# Import system modules
import arcpy
import os
# Set local variables
workspace = r"C:\gpqa\mytools\spatialjoin\usa.gdb"
outWorkspace = r"C:\gpqa\mytools\spatialjoin\output.gdb"
# Want to join USA cities to states and calculate the mean city population
# for each state
targetFeatures = os.path.join(workspace, "states")
joinFeatures = os.path.join(workspace, "cities")
# Output will be the target features, states, with a mean city population field (mcp)
outfc = os.path.join(outWorkspace, "states_mcp2")
# Create a new fieldmappings and add the two input feature classes.
fieldmappings = arcpy.FieldMappings()
fieldmappings.addTable(targetFeatures)
fieldmappings.addTable(joinFeatures)
# First get the POP1990 fieldmap. POP1990 is a field in the cities feature class.
# The output will have the states with the attributes of the cities. Setting the
# field's merge rule to mean will aggregate the values for all of the cities for
# each state into an average value. The field is also renamed to be more appropriate
# for the output.
pop1990FieldIndex = fieldmappings.findFieldMapIndex("POP1990")
fieldmap = fieldmappings.getFieldMap(pop1990FieldIndex)
# Get the output field's properties as a field object
field = fieldmap.outputField
# Rename the field and pass the updated field object back into the field map
field.name = "mean_city_pop"
field.aliasName = "mean_city_pop"
fieldmap.outputField = field
# Set the merge rule to mean and then replace the old fieldmap in the mappings object
# with the updated one
fieldmap.mergeRule = "mean"
fieldmappings.replaceFieldMap(pop1990FieldIndex, fieldmap)
# Delete fields that are no longer applicable, such as city CITY_NAME and CITY_FIPS
# as only the first value will be used by default
x = fieldmappings.findFieldMapIndex("CITY_NAME")
fieldmappings.removeFieldMap(x)
y = fieldmappings.findFieldMapIndex("CITY_FIPS")
fieldmappings.removeFieldMap(y)
#Run the Spatial Join tool, using the defaults for the join operation and join type
arcpy.SpatialJoin_analysis(targetFeatures, joinFeatures, outfc, "#", "#", fieldmappings)
Параметры среды
- Текущая рабочая область
- Временная рабочая область
- Выходная система координат
- Географические преобразования
- Экстент
- Разрешение M
- Допуск M
- Выходной домен M
- Выходной XY домен
- Выходной домен Z
- Выходные данные имеют M-значения
- Выходное значение Z по умолчанию
- Выходные данные имеют Z-значения
- Разрешение XY
- Допуск XY
- Разрешение Z
- Допуск Z
Информация о лицензиях
- Basic: Да
- Standard: Да
- Advanced: Да