Пространственное соединение (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 (пересекает)Присоединяемые объекты учитываются, если они пересекают целевые объекты. Это значение используется по умолчанию.
  • INTERSECT_3D (пересечь 3D) Присоединяемые объекты учитываются, если они пересекают целевые объекты в трехмерном пространстве (x, y и z).
  • 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 (имеют центр внутри)Присоединяемые объекты учитываются, если они содержат в своих границах центр целевого объекта. Центр объекта вычисляется следующим образом: для полигонального и мультиточечного объекта используется его геометрический центроид, а для линии используется ее геометрическая середина.
  • CLOSESTК целевому объекту присоединяется наиболее близко расположенный у нему присоединяемый объект. Более подробно см. советы по использованию.
String
search_radius
(дополнительно)

Расстояние от целевого объекта, в пределах которого присоединяемые объекты будут учитываться для пространственного соединения. Радиус поиска является корректным, только если задано пространственное отношение (опция сопоставления) INTERSECT или 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: Требует Да
9/10/2013