Skip To Content

Пространственное соединение

Краткая информация

Присоединяет атрибуты из одного объекта к другому на основании пространственного взаиморасположения. В выходной класс объектов записываются целевые объекты (исходного класса) с присоединенными атрибутами из другого класса.

Иллюстрации с примерами пространственных отношений

Использование

  • Пространственное соединение предполагает сопоставление строк атрибутивной таблицы Присоединяемых объектов и Целевых объектов на основании их пространственного расположения.

  • По умолчанию все атрибуты присоединяемых объектов присоединяются к атрибутам целевых объектов и копируются в выходной класс объектов. Можно задать, какие атрибуты будут записаны в выходной класс объектов, настроив параметр Список полей соединенных объектов.

  • Два новых поля, Join_Count и TARGET_FID, всегда добавляются к выходному классу объектов. Join_Count показывает, сколько соединенных объектов соответствуют каждому целевому объекту (TARGET_FID).

    Кроме того, в выходные данные добавляется новое поле JOIN_FID, если для параметра Операция соединения указано значение Один-ко-многим (JOIN_ONE_TO_MANY в 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 для Количества.

  • Если параметр Опции сопоставления настроен как Ближайший или Геодезически ближайший, существует вероятность, что два или более присоединяемых объекта находятся на одинаковом расстоянии от целевого объекта. В этом случае присоединен будет только один объект, выбираемый случайным образом (идентификатор присоединяемого объекта на выбор не влияет). Если вы хотите выбрать конкретный 2-й, 3-й или N-й ближайший объект, используйте инструмент Построить таблицу соседних объектов.

    Более подробно о вычислении близости

  • Если соединяемый объект имеет пространственное отношение с несколькими целевыми объектами, он учитывается столько раз, сколько он соответствует целевому объекту. Например, если точка находится внутри трех полигонов, тогда она считается три раза, по одному разу для каждого полигона.

  • Более подробно об использовании трехмерных пространственных отношений Пересечение 3D и В пределах расстояния 3D см. в разделе Выбор трехмерных отношений по расположению.

Синтаксис

SpatialJoin_analysis (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
(Дополнительный)

Определяет, как будут осуществляться соединения между целевыми и присоединяемыми объектами в выходном классе объектов, если найдено несколько присоединяемых объектов, которые имеют то же пространственное расположение по отношению к одному целевому объекту.

  • JOIN_ONE_TO_ONEЕсли найдено несколько присоединяемых объектов, которые имеют одинаковое пространственное расположение по отношению к одному целевому объекту, будут агрегированы атрибуты из нескольких соединяемых объектов с использованием правила слияния в соответствии со Списком полей. Например, если точечный целевой объект расположен внутри двух отдельных полигонов в классе присоединяемых объектов, атрибуты этих двух полигонов будут агрегированы до переноса в выходной класс объектов. Если один полигон имеет атрибутивное значение 3, а другой – значение 7, и задано правило слияния Суммарное значение, значение в выходном классе объектов будет равно 10. Используется по умолчанию.
  • JOIN_ONE_TO_MANYЕсли найдено несколько присоединяемых объектов, которые имеют одинаковое пространственное расположение по отношению к одному целевому объекту, выходной класс объектов будет содержать несколько копий строки атрибутивной таблицы соответствующего целевого объекта. Например, если точечный целевой объект расположен внутри двух отдельных полигонов в классе присоединяемых объектов, выходной класс объектов будет содержать две строки атрибутивной таблицы целевого объекта: одна – с атрибутами одного полигона, другая – с атрибутами другого.
String
join_type
(Дополнительный)

Определяет, будут ли поддерживаться в выходном классе объектов (внешнее соединение) все целевые объекты или только те, у которых имеется заданное пространственное отношение с соединяемыми объектами (внутреннее соединение).

  • KEEP_ALLВсе целевые объекты будут записаны в выходные данные (внешнее соединение). Используется по умолчанию.
  • KEEP_COMMON Только те целевые объекты, которые имеют заданное пространственное отношение с соединяемыми объектами, будут поддерживаться в выходном классе объектов (внутреннее соединение). Например, если для целевых объектов задан класс точечных объектов, а для присоединяемых объектов – класс полигональных объектов, и match_option = "WITHIN", выходной класс объектов будет содержать только те целевые объекты, которые находятся внутри полигонального соединяемого объекта; все целевые объекты, не находящиеся в пределах соединяемых объектов, будут исключены из выходных данных.
Boolean
field_mapping
(Дополнительный)

Контролирует, какие атрибутивные поля будут в выходном классе объектов. Список содержит все поля и целевых, и присоединяемых объектов. Поля можно добавить, удалить, переименовать или изменить их свойства. Выбранные поля переносятся из целевых объектов в неизменяемом виде, а выбранные поля из присоединяемых объектов могут объединяться в соответствии с правилом слияния. Дополнительные сведения о сопоставлении полей см. в разделах справки: Использование элемента управления сопоставлением полей и Сопоставление входных и выходных полей. Можно задать несколько полей и комбинацию статистических показателей.

Field Mappings
match_option
(Дополнительный)

Определяет критерии для сопоставления строк. Опции сопоставления:

  • INTERSECTПрисоединяемые объекты учитываются, если они пересекают целевые объекты. Используется по умолчанию. Укажите расстояние в параметре search_radius.
  • INTERSECT_3D Присоединяемые объекты учитываются, если они пересекают целевые объекты в трехмерном пространстве (x, y и z). Укажите расстояние в параметре search_radius.
  • WITHIN_A_DISTANCEПрисоединяемые объекты учитываются, если они находятся в пределах указанного расстояния от целевого объекта. Укажите расстояние в параметре search_radius.
  • WITHIN_A_DISTANCE_GEODESICТакое же, как и WITHIN_A_DISTANCE, только используется геодезическое расстояние, а не плоскостное. Выберите, если ваши данные расположены на большой территории или если система координат входных объектов не подходит для вычисления расстояний.
  • WITHIN_A_DISTANCE_3DПрисоединяемые объекты учитываются, если они находятся в пределах указанного расстояния от целевого объекта в трехмерном пространстве. Укажите расстояние в параметре search_radius.
  • CONTAINSЦелевые объекты должны содержать в своих границах присоединяемые объекты. Целевыми объектами должны быть полигоны или полилинии. Для этой опции целевые объекты не могут быть точками, а присоединяемые объекты могут быть только полигонами, если целевые объекты также являются полигонами.
  • COMPLETELY_CONTAINSПрисоединяемые объекты учитываются, если они целиком содержатся в целевом объекте. Полигон может полностью содержать любой объект. Точка не может полностью содержать какой-либо объект, даже точку. Полилиния может полностью содержать только полилинию и точку.
  • CONTAINS_CLEMENTINIЭто пространственное отношение дает те же результаты, что и COMPLETELY_CONTAINS, за исключением ситуаций, когда присоединяемый объект находится целиком на границе целевого объекта (ни одна часть не находится внутри или за пределами); в этом случае объект учитываться не будет. Опция Clementini предполагает, что граница полигона – это линия, отделяющая внутреннюю область полигона от внешней, граница линии – это ее конечные точки, а граница точки всегда является пустой.
  • WITHINЦелевые объекты должны содержать в своих границах присоединяемые объекты. Это противоположность к CONTAINS. Для этой опции целевые объекты могут быть только полигонами, а присоединяемые объекты – также полигонами. Точка может быть присоединяемым объектом, только если целевым объектом является точка.
  • COMPLETELY_WITHINПрисоединяемые объекты учитываются, если целевой объект целиком в них содержится. Это противоположность к COMPLETELY_CONTAINS.
  • WITHIN_CLEMENTINIРезультат будет тем же, что и с опцией WITHIN, за исключением ситуаций, когда присоединяемый объект находится целиком на границе целевого объекта; в этом случае объект учитываться не будет. Опция Clementini предполагает, что граница полигона – это линия, отделяющая внутреннюю область полигона от внешней, граница линии – это ее конечные точки, а граница точки всегда является пустой.
  • ARE_IDENTICAL_TOПрисоединяемые объекты учитываются, если они идентичны целевому объекту. Присоединяемый и целевой объекты должны иметь один и тот же тип геометрии – точка и точка, линия и линия или полигон и полигон.
  • BOUNDARY_TOUCHESПрисоединяемые объекты учитываются, если их границы касаются целевого объекта. Если целевые и присоединяемые объекты являются линиями или полигонами, граница присоединяемого объекта может только касаться границы целевого объекта, и ни одна часть присоединяемого объекта не может пересекать границу целевого объекта.
  • SHARE_A_LINE_SEGMENT_WITHПрисоединяемые объекты учитываются, если они имеют общий линейный сегмент с целевым объектом. Присоединяемые и целевые объекты должны быть линейными или полигональными.
  • CROSSED_BY_THE_OUTLINE_OFПрисоединяемые объекты учитываются, если целевой объект пересекается их контуром. Присоединяемые и целевые объекты должны быть линейными или полигональными. Если присоединяемыми и целевыми объектами являются полигоны, используется граница полигона (линия). Будут учитываться линии, пересекающиеся в точке, но не линии с общим линейным сегментом.
  • HAVE_THEIR_CENTER_INПрисоединяемые объекты учитываются, если они содержат в своих границах центр целевого объекта. Центр объекта вычисляется следующим образом: для полигонального и мультиточечного объекта используется его геометрический центроид, а для линии используется ее геометрическая середина. Укажите расстояние в параметре search_radius.
  • CLOSESTК целевому объекту присоединяется наиболее близко расположенный у нему присоединяемый объект. Более подробно см. советы по использованию. Укажите расстояние в параметре search_radius.
  • CLOSEST_GEODESICТакое же, как и CLOSEST, только используется геодезическое расстояние, а не плоскостное. Выберите, если ваши данные расположены на большой территории или если система координат входных объектов не подходит для вычисления расстояний
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
(Дополнительный)

Имя поля, которое будет добавлено в выходной класс объектов и в котором будет информация о расстоянии между целевым объектом и ближайшим присоединяемым объектом. Эта опция является корректной, только если задано пространственное отношение (match_option) 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)

Информация о лицензиях

  • Basic: Да
  • Standard: Да
  • Advanced: Да

Связанные разделы