Пространственное соединение (Spatial Join) (Анализ)
Краткая информация
Присоединяет атрибуты из одного объекта к другому на основании пространственного взаиморасположения. В выходной класс объектов записываются целевые объекты (исходного класса) с присоединенными атрибутами из другого класса.
Использование
Пространственное соединение предполагает сопоставление строк атрибутивной таблицы Присоединяемых объектов (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) отмечена (в скриптах KEEP_ALL).
Правила слияния, определяемые с помощью параметра Список полей соединенных объектов (Field Map of Join Features), применяются только к атрибутам присоединяемых объектов, если более одного объекта соответствует целевому объекту (если Join_Count > 1). Например, если к одному целевому объекту присоединяются три объекта, с значениями атрибута DEPTH – 15.5, 2.5, и 3.3, и используется правило слияния Среднее (Mean), в выходное атрибутивное поле будет записано значение 6.1. При статистическом расчете нулевые значения в соединяемых полях игнорируются. Например, 15,5, <null> и 2,5 дадут в результате 9,0 для Среднего (Mean) и 2 для Количества (Count).
Если параметр Опции сопоставления (Match Option) настроен как БЛИЖАЙШИЙ (CLOSEST), существует вероятность, что два или более присоединяемых объектов находятся на одинаковом расстоянии от целевого объекта. В это случае присоединен будет только один объект, выбираемый случайным образом (идентификатор присоединяемого объекта на выбор не влияет). Если вы хотите выбрать конкретный 2-й, 3-й или N-й ближайший объект, используйте инструмент Построить таблицу соседних объектов (Generate Near Table).
Если соединяемый объект имеет пространственное отношение с несколькими целевыми объектами, он учитывается столько раз, сколько он соответствует целевому объекту. Например, если точка находится ВНУТРИ (WITHIN) трех полигонов, тогда она считается три раза, по разу для каждого полигона.
Синтаксис
Параметр | Объяснение | Тип данных |
target_features |
Атрибуты целевых объектов, к которым присоединяются атрибуты присоединяемых объектов и которые будут перенесены в выходной класс объектов. Если необходимо перенести только часть атрибутов, их можно задать в списке полей. Целевыми объектами может быть любой источник пространственных данных, поддерживаемых ArcGIS. | Feature Layer |
join_features |
Атрибуты, которые будут присоединены к объектам целевого класса. Дополнительные сведения о том, как тип операции соединения влияет на объединение присоединяемых атрибутов, см в описании параметра Операция соединения (Join Operation). | Feature Layer |
out_feature_class |
Новый класс пространственных объектов, содержащий атрибуты целевых и присоединяемых объектов. По умолчанию все атрибуты целевых и присоединяемых объектов записываются в целевой класс объектов. Однако, можно определить в списке полей поднабор атрибутов целевых и присоединяемых объектов, которые будут записаны в выходной класс объектов. | Feature Class |
join_operation (дополнительно) |
Определяет, как будут осуществляться соединения между целевыми и присоединяемыми объектами в выходном классе объектов, если найдено несколько присоединяемых объектов, которые имеют то же пространственное расположение по отношению к одному целевому объекту.
| String |
join_type (дополнительно) |
Определяет, будут ли все целевые объекты поддерживаться в выходном классе объектов (внешнее соединение), или только те, которые имеют заданное пространственное отношение с соединяемыми объектами (внутреннее соединение).
| Boolean |
field_mapping (дополнительно) |
Контролирует, какие атрибутивные поля будут в выходном классе объектов. Список содержит все поля и целевых, и присоединяемых объектов. Поля можно добавить, удалить, переименовать или изменить их свойства. Выбранные поля переносятся из целевых объектов в неизменяемом виде, а выбранные поля из присоединяемых объектов могут объединяться в соответствии с правилом слияния. Дополнительные сведения о сопоставлении полей см. в разделах справки: Использование элемента управления сопоставлением полей (Using the field mapping control) и Сопоставление входных и выходных полей (Mapping input fields to output fields). Можно задать несколько полей и комбинацию статистических показателей. | Field Mappings |
match_option (дополнительно) |
Определяет критерии для сопоставления строк. Опции сопоставления:
| String |
search_radius (дополнительно) |
Расстояние от целевого объекта, в пределах которого присоединяемые объекты будут учитываться для пространственного соединения. Радиус поиска является корректным, только если задано пространственное отношение (опция сопоставления) INTERSECT, WITHIN_A_DISTANCE, HAVE_THEIR_CENTER_IN или CLOSEST. То есть, если задан радиус поиска 100 метров с пространственным отношением INTERSECT, это означает, что присоединяемый объект, расположенный в пределах 100 метров от целевого объекта, будет считаться с ним совпадающим. | Linear unit |
distance_field_name (дополнительно) |
Имя поля, которое будет добавлено в выходной класс объектов и в котором будет информация о расстоянии между целевым объектом и ближайшим присоединяемым объектом. Эта опция является корректной, только если задано пространственное отношение (опция сопоставления) CLOSEST. Значения в этом поле равно -1, если в пределах радиуса поиска не найдено подходящего объекта. Если не указано имя поля, это поле не будет добавлено в выходной класс объектов. | String |
Пример кода
Пример скрипта для использования функции Пространственное соединение (Spatial Join), с запуском из окна Python в ArcGIS.
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)
Пример скрипта Python для выполнения функции Пространственное соединение для соединения атрибутов городов и районов с запуском в автономном режиме.
# 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)