Пространственное соединение (Spatial Join) (Анализ)

Уровень лицензии:BasicStandardAdvanced

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

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

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

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

Синтаксис

SpatialJoin_analysis (target_features, join_features, out_feature_class, {join_operation}, {join_type}, {field_mapping}, {match_option}, {search_radius}, {distance_field_name})
ПараметрОбъяснениеТип данных
target_features

Атрибуты целевых объектов, к которым присоединяются атрибуты присоединяемых объектов и которые будут перенесены в выходной класс объектов. Если необходимо перенести только часть атрибутов, их можно задать в списке полей. Целевыми объектами может быть любой источник пространственных данных, поддерживаемых ArcGIS.

Feature Layer
join_features

Атрибуты, которые будут присоединены к объектам целевого класса. Дополнительные сведения о том, как тип операции соединения влияет на объединение присоединяемых атрибутов, см в описании параметра Операция соединения (Join Operation).

Feature Layer
out_feature_class

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

Feature Class
join_operation
(дополнительно)

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

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

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

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

Контролирует, какие атрибутивные поля будут в выходном классе объектов. Список содержит все поля и целевых, и присоединяемых объектов. Поля можно добавить, удалить, переименовать или изменить их свойства. Выбранные поля переносятся из целевых объектов в неизменяемом виде, а выбранные поля из присоединяемых объектов могут объединяться в соответствии с правилом слияния. Дополнительные сведения о сопоставлении полей см. в разделах справки: Использование элемента управления сопоставлением полей (Using the field mapping control) и Сопоставление входных и выходных полей (Mapping input fields to output fields). Можно задать несколько полей и комбинацию статистических показателей.

Field Mappings
match_option
(дополнительно)

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

  • INTERSECT (пересекает)Присоединяемые объекты учитываются, если они пересекают целевые объекты. Это значение используется по умолчанию. Укажите расстояние с помощью параметра Радиус поиска (Search Radius).
  • INTERSECT_3D (пересечь 3D) Присоединяемые объекты учитываются, если они пересекают целевые объекты в трехмерном пространстве (x, y и z). Укажите расстояние с помощью параметра Радиус поиска (Search Radius).
  • WITHIN_A_DISTANCE (в пределах расстояния)Присоединяемые объекты учитываются, если они находятся в пределах указанного расстояния от целевого объекта. Укажите расстояние с помощью параметра Радиус поиска (Search Radius).
  • WITHIN_A_DISTANCE_3D (в пределах расстояния 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).
String
search_radius
(дополнительно)

Расстояние от целевого объекта, в пределах которого присоединяемые объекты будут учитываться для пространственного соединения. Радиус поиска является корректным, только если задано пространственное отношение (опция сопоставления) INTERSECT, WITHIN_A_DISTANCE, HAVE_THEIR_CENTER_IN или CLOSEST. То есть, если задан радиус поиска 100 метров с пространственным отношением INTERSECT, это означает, что присоединяемый объект, расположенный в пределах 100 метров от целевого объекта, будет считаться с ним совпадающим.

Linear unit
distance_field_name
(дополнительно)

Имя поля, которое будет добавлено в выходной класс объектов и в котором будет информация о расстоянии между целевым объектом и ближайшим присоединяемым объектом. Эта опция является корректной, только если задано пространственное отношение (опция сопоставления) CLOSEST. Значения в этом поле равно -1, если в пределах радиуса поиска не найдено подходящего объекта. Если не указано имя поля, это поле не будет добавлено в выходной класс объектов.

String

Пример кода

Пространственное соединение. Пример 1 (окно Python)

Пример скрипта для использования функции Пространственное соединение (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)
Пространственное соединение. Пример 2 (автономный скрипт)

Пример скрипта 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)

Параметры среды

Связанные темы

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

ArcGIS for Desktop Basic: Да
ArcGIS for Desktop Standard: Да
ArcGIS for Desktop Advanced: Да
5/10/2014