Сводка
Присоединяет атрибуты из одного объекта к другому на основании пространственного взаиморасположения. В выходной класс объектов записываются целевые объекты (исходного класса) с присоединенными атрибутами из другого класса.
Использование
Пространственное соединение сопоставляет строки из Присоединяемых объектов с Целевыми объектами на основе их пространственного расположения относительно друг друга.
По умолчанию все атрибуты присоединяемых объектов присоединяются к атрибутам целевых объектов и копируются в выходной класс объектов. Можно задать, какие атрибуты будут записаны в выходной класс объектов, настроив параметр Список полей соединенных объектов.
К выходному классу объектов добавляются два новых поля: Join_Count и TARGET_FID. Join_Count показывает, сколько присоединенных объектов соответствуют каждому целевому объекту (TARGET_FID).
Кроме того, в выходные данные добавляется новое поле JOIN_FID, если указано значение Один-ко-многим (JOIN_ONE_TO_MANY в Python) для параметра Операция соединения (join_operation в Python).
Если для параметра Операции соединения указано значение Один-ко-многим, каждому целевому объекту в выходном классе может соответствовать более одной строки. Используйте поле JOIN_FID, чтобы определить, к какому целевому объекту (TARGET_FID) присоединяется тот или иной объект. Значение -1 в поле JOIN_FID означает, что ни один объект не соответствует заданному пространственному отношению с целевым объектом.
Все целевые объекты исходного класса будут сохранены в выходном классе объектов, если применяются оба следующих условия:
- Параметр Операции соединения установлен как Один-к-одному.
- Выбрана опция Сохранить все целевые объекты (join_type = "KEEP_ALL" в Python).
Все поля в выходном наборе данных и содержание этих полей можно контролировать с помощью Списка полей.
- Чтобы изменить порядок полей, выберите имя поля и перетащите его в нужное положение.
- Тип данных по умолчанию для выходного поля будет таким же, как тип данных первого входного поля (того имени), с которым он сталкивается. Вы можете вручную изменить тип данных в любое время на любой другой допустимый тип данных.
- Применимы следующие правила слияния: первый, последний, соединение, сумма, среднее, медиана, мода, минимум, максимум, стандартное отклонение и количество.
- Используя правило слияния Соединение, вы можете задать собственный разделитель, например, пробел, запятую, точку, тире и т.д. Чтобы использовать пробел, убедитесь, что курсор мыши находится в начале входного набора и щелкните клавишу пробел один раз.
- Можно указать начальное и конечное положения текстовых полей, используя опцию формата.
- Среднеквадратическое отклонение не должно быть использовано для одного входного поля, так как значения нельзя делить на ноль. Поэтому среднеквадратическое отклонение не может применяться для одного входного поля.
Правила слияния, определяемые с помощью параметра Список полей соединенных объектов, применяются только к атрибутам присоединяемых объектов, если более одного объекта соответствует целевому объекту (если Join_Count > 1). Например, если к одному целевому объекту присоединяются три объекта, со значениями атрибута DEPTH 15.5, 2.5, и 3.3, и используется правило слияния Среднее, в выходное атрибутивное поле будет записано значение 6.1. При статистическом расчете нулевые значения в соединяемых полях игнорируются. Например, 15,5, <null> и 2,5 дадут в результате 9,0 для Среднего и 2 для Количества.
Если параметр Опции сопоставления настроен как Ближайший или Геодезически ближайший, существует вероятность, что два или более присоединяемых объекта находятся на одинаковом расстоянии от целевого объекта. В этом случае будет присоединен только один объект, выбираемый случайным образом (Object ID присоединяемого объекта на выбор не влияет). Если вы хотите выбрать конкретный 2-й, 3-й или N-й ближайший объект, используйте инструмент Построить таблицу соседних объектов.
Если соединяемый объект имеет пространственное отношение с несколькими целевыми объектами, он учитывается столько раз, сколько он соответствует целевому объекту. Например, если точка находится внутри трех полигонов, она считается три раза, по одному разу для каждого полигона.
Более подробно об использовании трехмерных пространственных отношений Пересечение 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})
Parameter | Объяснение | Тип данных |
target_features | Атрибуты целевых объектов, к которым присоединяются атрибуты присоединяемых объектов и которые будут перенесены в выходной класс объектов. Если необходимо перенести только часть атрибутов, их можно задать в списке полей. | Feature Layer |
join_features | Атрибуты, которые будут присоединены к объектам целевого класса. Дополнительные сведения о том, как тип операции соединения влияет на объединение присоединяемых атрибутов, см. в описании параметра join_operation. | Feature Layer |
out_feature_class | Новый класс пространственных объектов, содержащий атрибуты целевых и присоединяемых объектов. По умолчанию все атрибуты целевых и присоединяемых объектов записываются в целевой класс объектов. Но можно определить в списке полей поднабор атрибутов целевых и присоединяемых объектов, которые будут записаны в выходной класс объектов. | Feature Class |
join_operation (Дополнительный) | Определяет, как будут осуществляться соединения между целевыми и присоединяемыми объектами в выходном классе объектов, если найдено несколько присоединяемых объектов, которые имеют то же пространственное расположение по отношению к одному целевому объекту.
| String |
join_type (Дополнительный) | Определяет, будут ли поддерживаться в выходном классе объектов (внешнее соединение) все целевые объекты или только те, у которых имеется заданное пространственное отношение с соединяемыми объектами (внутреннее соединение).
| Boolean |
field_mapping (Дополнительный) | Контролирует, какие атрибутивные поля будут в выходных данных. По умолчанию будут включены все поля из входных данных. Поля можно добавлять, удалять, переименовывать и переупорядочивать, а также изменять их свойства. Правила слияния позволяют вам определить, каким образом значения из нескольких входных полей будут слиты или объединены в одно выходное значение. Имеется несколько правил слияния, которые можно использовать для определения способа присвоения значений выходным полям.
В Python можно использовать класс FieldMappings для определения этого параметра. | 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, если значение search_radius не задано, используется расстояние 0. | Linear Unit |
distance_field_name (Дополнительный) | Имя поля, которое будет добавлено в выходной класс объектов и в котором будет информация о расстоянии между целевым объектом и ближайшим присоединяемым объектом. Этот параметр допустим, только если задано пространственное отношение (параметр match_option задан как CLOSEST или CLOSEST_GEODESIC). Значения в этом поле равно -1, если в пределах радиуса поиска не найдено подходящего объекта. Если не указано имя поля, это поле не будет добавлено в выходной класс объектов. | String |
Пример кода
Пример скрипта для использования функции SpatialJoin в окне Python.
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, демонстрирующий использование функции 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)
Environments
Информация о лицензиях
- Basic: Да
- Standard: Да
- Advanced: Да