Add Spatial Join (Data Management)

Summary

Joins attributes from one feature to another based on the spatial relationship. The target features and the joined attributes from the join features will be joined. The join is temporary.

See Select By Location graphic examples for more information.

Usage

  • A spatial join matches rows from the Join Features values to the Target Features values based on their relative spatial locations.

  • The tool creates the following fields on the temporary join:

    • Join_Count—The number of join features that match each target feature
    • TARGET_FID—The Object ID of the target feature

  • This tool does not support a one-to-many join. To achieve a one-to-many join, use the Spatial Join tool.

  • By default, all attributes of the join features are joined to attributes of the target features. You can define which attributes will be in the joined output using the Field Map parameter.

  • To manage the fields in the output dataset and the contents of those fields, use the Field Map parameter.

    • To change the field order, select a field name and drag it to the new position.
    • The default data type of an output field is the same as the data type of the first input field (of that name) it encounters. You can manually change the data type at any time to any other valid data type.
    • The available merge rules are first, last, join, sum, mean, median, mode, minimum, maximum, standard deviation, and count.
    • When using the Join merge rule, you can specify a delimiter such as a space, comma, period, dash, and so on. To use a space, ensure that the pointer is at the start of the input box and press the Spacebar once.
    • You can specify the start and end positions of text fields using the format option.
    • Do not perform standard deviation on a single input because values cannot be divided by zero, so standard deviation is not a valid option for single inputs.

    Learn more about mapping fields in scripts

  • Merge rules specified in the Field Map of Join Features parameter only apply to attributes from the join features and when more than one feature is matched to a target feature (when Join_Count > 1). For example, if three features with DEPTH attribute values of 15.5, 2.5, and 3.3 are joined, and a merge rule of Mean is applied, the output field will have a value of 6.1. Null values in join fields are ignored for statistic calculation. For example, 15.5, <null>, and 2.5 will result in 9.0 for Mean and 2 for Count.

  • When the Match Option parameter is set to Closest or Closest geodesic, two or more join features may be the same distance from the target feature. When this occurs, one of the join features will be randomly selected as the matching feature (the join feature's Object ID does not influence this random selection). To find the second, third, or nth closest feature, use the Generate Near Table tool.

    Learn more about how proximity is calculated

  • If a join feature has a spatial relationship with multiple target features, it will be counted as many times as it is matched with the target feature. For example, if a point is within three polygons, the point will be counted three times, once for each polygon.

  • For more information about using the Intersect 3D and Within a distance 3D spatial relationships, see Select By Location: 3D relationships.

Parameters

LabelExplanationData Type
Target Features

The attributes from the target features and the attributes from the joined features will be joined to the target features layer. However, a subset of attributes can be defined using the Field Map parameter.

Feature Layer
Join Features

The attributes from the join features will be joined to the attributes of the target features. See the explanation of the Join Operation parameter for details on how the aggregation of joined attributes are affected by the type of join operation.

Feature Layer
Join Operation
(Optional)

Only the Join one to one option is supported by this tool. Specifying the Join one to many option will result in a one-to-one join, not a one-to-many join. To achieve a one-to-many join when the output is created in an output feature class, use the Spatial Join tool.

  • Join one to oneIf multiple join features are found that have the same spatial relationship with a single target feature, the attributes from the multiple join features will be aggregated using a field map merge rule. For example, if a point target feature is found in two separate polygon join features, the attributes from the two polygons will be aggregated before being transferred to the output point feature class. If one polygon has an attribute value of 3 and the other has a value of 7, and a Sum merge rule is specified, the aggregated value will be 10. This is the default.
  • Join one to manyThis option is not supported and will produce a one-to-one join.
String
Keep All Target Features
(Optional)

Specifies whether only target features with a spatial relationship with a join feature (known as an inner join) will be preserved or all target features will be preserved, even without a spatial relationship with the join features (known as an outer join).

  • Checked—All features in the target features layer will be preserved. This is the default.
  • Unchecked—Only those features in the target features layer with a spatial relationship with a join feature will be preserved.
Boolean
Field Map
(Optional)

The attribute fields that will be in the output with the corresponding field properties and source fields. By default, all fields from the inputs will be included.

Fields can be added, deleted, renamed, and reordered, and you can change their properties.

Merge rules allow you to specify how values from two or more input fields are merged or combined into a single output value. There are several merge rules you can use to determine how the output field will be populated with values.

  • First—Use the input fields' first value.
  • Last—Use the input fields' last value.
  • Join—Concatenate (join) the input field values.
  • Sum—Calculate the total of the input field values.
  • Mean—Calculate the mean (average) of the input field values.
  • Median—Calculate the median (middle) of the input field values.
  • Mode—Use the value with the highest frequency.
  • Min—Use the minimum value of all the input field values.
  • Max—Use the maximum value of all the input field values.
  • Standard deviation—Use the standard deviation classification method on all the input field values.
  • Count—Find the number of records included in the calculation.

Field Mappings
Match Option
(Optional)

Specifies the criteria that will be used to match rows.

  • IntersectThe features in the join features will be matched if they intersect a target feature. This is the default. Specify a distance in the Search Radius parameter.
  • Intersect 3D The features in the join features will be matched if they intersect a target feature in three-dimensional space (x, y, and z). Specify a distance in the Search Radius parameter.
  • Within a distanceThe features in the join features will be matched if they are within a specified distance of a target feature. Specify a distance in the Search Radius parameter.
  • Within a distance geodesicSame as Within a distance except that geodesic distance is used rather than planar distance. Choose this if your data covers a large geographic extent or the coordinate system of the inputs is unsuitable for distance calculations.
  • Within a distance 3DThe features in the join features will be matched if they are within a specified distance of a target feature in three-dimensional space. Specify a distance in the Search Radius parameter.
  • ContainsThe features in the join features will be matched if a target feature contains them. The target features must be polygons or polylines. For this option, the target features cannot be points, and the join features can only be polygons when the target features are also polygons.
  • Completely containsThe features in the join features will be matched if a target feature completely contains them. Polygon can completely contain any feature. Point cannot completely contain any feature, not even a point. Polyline can completely contain only polyline and point.
  • Contains ClementiniThis spatial relationship yields the same results as Completely contains with the exception that if the join feature is entirely on the boundary of the target feature (no part is properly inside or outside) the feature will not be matched. Clementini defines the boundary polygon as the line separating inside and outside, the boundary of a line is defined as its end points, and the boundary of a point is always empty.
  • WithinThe features in the join features will be matched if a target feature is within them. It is opposite to Contains. For this option, the target features can only be polygons when the join features are also polygons. Point can be join feature only if point is target.
  • Completely withinThe features in the join features will be matched if a target feature is completely within them. This is opposite to Completely contains.
  • Within ClementiniThe result will be identical to Within except if the entirety of the feature in the join features is on the boundary of the target feature, the feature will not be matched. Clementini defines the boundary polygon as the line separating inside and outside, the boundary of a line is defined as its end points, and the boundary of a point is always empty.
  • Are identical toThe features in the join features will be matched if they are identical to a target feature. Both join and target feature must be of same shape type—point-to-point, line-to-line, and polygon-to-polygon.
  • Boundary touchesThe features in the join features will be matched if they have a boundary that touches a target feature. When the target and join features are lines or polygons, the boundary of the join feature can only touch the boundary of the target feature and no part of the join feature can cross the boundary of the target feature.
  • Share a line segment withThe features in the join features will be matched if they share a line segment with a target feature. The join and target features must be lines or polygons.
  • Crossed by the outline ofThe features in the join features will be matched if a target feature is crossed by their outline. The join and target features must be lines or polygons. If polygons are used for the join or target features, the polygon's boundary (line) will be used. Lines that cross at a point will be matched, not lines that share a line segment.
  • Have their center inThe features in the join features will be matched if a target feature's center falls within them. The center of the feature is calculated as follows: for polygon and multipoint the geometry's centroid is used, and for line input the geometry's midpoint is used. Specify a distance in the Search Radius parameter.
  • ClosestThe feature in the join features that is closest to a target feature is matched. See the usage tip for more information. Specify a distance in the Search Radius parameter.
  • Closest geodesicSame as Closest except that geodesic distance is used rather than planar distance. Choose this if your data covers a large geographic extent or the coordinate system of the inputs is unsuitable for distance calculations
  • Largest overlapThe feature in the join features will be matched with the target feature with the largest overlap.
String
Search Radius
(Optional)

Join features within this distance of a target feature will be considered for the spatial join. A search radius is only valid when the spatial relationship is specified (the Match Option parameter is set to Intersect, Within a distance, Within a distance geodesic, Have their center in, Closest, or Closest geodesic). For example, using a search radius of 100 meters with the Within a distance spatial relationship will join feature within 100 meters of a target feature. For the three Within a distance relationships, if no value is specified for Search Radius, a distance of 0 is used.

Linear Unit
Distance Field Name
(Optional)

The name of a field, which will be added to the join, that contains the distance between the target feature and the closest join feature. This parameter is only valid when the spatial relationship is specified (Match Option is set to Closest or Closest geodesic). The value of this field is -1 if no feature is matched within a search radius. If no field name is specified, the field will not be added to the join.

String

Derived Output

LabelExplanationData Type
Output Feature Class

The updated input dataset.

Feature Class

arcpy.management.AddSpatialJoin(target_features, join_features, {join_operation}, {join_type}, {field_mapping}, {match_option}, {search_radius}, {distance_field_name})
NameExplanationData Type
target_features

The attributes from the target features and the attributes from the joined features will be joined to the target features layer. However, a subset of attributes can be defined using the field_mapping parameter.

Feature Layer
join_features

The attributes from the join features will be joined to the attributes of the target features. See the explanation of the join_operation parameter for details on how the aggregation of joined attributes are affected by the type of join operation.

Feature Layer
join_operation
(Optional)

Only the JOIN_ONE_TO_ONE option is supported by this tool. Specifying the JOIN_ONE_TO_MANY option will result in a one-to-one join, not a one-to-many join. To achieve a one-to-many join when the output is created in an output feature class, use the Spatial Join tool.

  • JOIN_ONE_TO_ONEIf multiple join features are found that have the same spatial relationship with a single target feature, the attributes from the multiple join features will be aggregated using a field map merge rule. For example, if a point target feature is found in two separate polygon join features, the attributes from the two polygons will be aggregated before being transferred to the output point feature class. If one polygon has an attribute value of 3 and the other has a value of 7, and a Sum merge rule is specified, the aggregated value will be 10. This is the default.
  • JOIN_ONE_TO_MANYThis option is not supported and will produce a one-to-one join.
String
join_type
(Optional)

Specifies whether only records in the input that match a record in the join table will be preserved.

  • KEEP_ALLAll features in the target features layer will be preserved. This is known as an outer join. This is the default.
  • KEEP_COMMONOnly those features in the target features layer with a spatial relationship with a join feature will be preserved. This is known as an inner join.
Boolean
field_mapping
(Optional)

The attribute fields that will be in the output with the corresponding field properties and source fields. By default, all fields from the inputs will be included.

Fields can be added, deleted, renamed, and reordered, and you can change their properties.

Merge rules allow you to specify how values from two or more input fields are merged or combined into a single output value. There are several merge rules you can use to determine how the output field will be populated with values.

  • First—Use the input fields' first value.
  • Last—Use the input fields' last value.
  • Join—Concatenate (join) the input field values.
  • Sum—Calculate the total of the input field values.
  • Mean—Calculate the mean (average) of the input field values.
  • Median—Calculate the median (middle) of the input field values.
  • Mode—Use the value with the highest frequency.
  • Min—Use the minimum value of all the input field values.
  • Max—Use the maximum value of all the input field values.
  • Standard deviation—Use the standard deviation classification method on all the input field values.
  • Count—Find the number of records included in the calculation.

In Python, you can use the FieldMappings class to define this parameter.

Field Mappings
match_option
(Optional)

Specifies the criteria that will be used to match rows.

  • INTERSECTThe features in the join features will be matched if they intersect a target feature. This is the default. Specify a distance in the search_radius parameter.
  • INTERSECT_3D The features in the join features will be matched if they intersect a target feature in three-dimensional space (x, y, and z). Specify a distance in the search_radius parameter.
  • WITHIN_A_DISTANCEThe features in the join features will be matched if they are within a specified distance of a target feature. Specify a distance in the search_radius parameter.
  • WITHIN_A_DISTANCE_GEODESICSame as WITHIN_A_DISTANCE except that geodesic distance is used rather than planar distance. Choose this if your data covers a large geographic extent or the coordinate system of the inputs is unsuitable for distance calculations.
  • WITHIN_A_DISTANCE_3DThe features in the join features will be matched if they are within a specified distance of a target feature in three-dimensional space. Specify a distance in the search_radius parameter.
  • CONTAINSThe features in the join features will be matched if a target feature contains them. The target features must be polygons or polylines. For this option, the target features cannot be points, and the join features can only be polygons when the target features are also polygons.
  • COMPLETELY_CONTAINSThe features in the join features will be matched if a target feature completely contains them. Polygon can completely contain any feature. Point cannot completely contain any feature, not even a point. Polyline can completely contain only polyline and point.
  • CONTAINS_CLEMENTINIThis spatial relationship yields the same results as COMPLETELY_CONTAINS with the exception that if the join feature is entirely on the boundary of the target feature (no part is properly inside or outside) the feature will not be matched. Clementini defines the boundary polygon as the line separating inside and outside, the boundary of a line is defined as its end points, and the boundary of a point is always empty.
  • WITHINThe features in the join features will be matched if a target feature is within them. It is opposite to CONTAINS. For this option, the target features can only be polygons when the join features are also polygons. Point can be join feature only if point is target.
  • COMPLETELY_WITHINThe features in the join features will be matched if a target feature is completely within them. This is opposite to COMPLETELY_CONTAINS.
  • WITHIN_CLEMENTINIThe result will be identical to WITHIN except if the entirety of the feature in the join features is on the boundary of the target feature, the feature will not be matched. Clementini defines the boundary polygon as the line separating inside and outside, the boundary of a line is defined as its end points, and the boundary of a point is always empty.
  • ARE_IDENTICAL_TOThe features in the join features will be matched if they are identical to a target feature. Both join and target feature must be of same shape type—point-to-point, line-to-line, and polygon-to-polygon.
  • BOUNDARY_TOUCHESThe features in the join features will be matched if they have a boundary that touches a target feature. When the target and join features are lines or polygons, the boundary of the join feature can only touch the boundary of the target feature and no part of the join feature can cross the boundary of the target feature.
  • SHARE_A_LINE_SEGMENT_WITHThe features in the join features will be matched if they share a line segment with a target feature. The join and target features must be lines or polygons.
  • CROSSED_BY_THE_OUTLINE_OFThe features in the join features will be matched if a target feature is crossed by their outline. The join and target features must be lines or polygons. If polygons are used for the join or target features, the polygon's boundary (line) will be used. Lines that cross at a point will be matched, not lines that share a line segment.
  • HAVE_THEIR_CENTER_INThe features in the join features will be matched if a target feature's center falls within them. The center of the feature is calculated as follows: for polygon and multipoint the geometry's centroid is used, and for line input the geometry's midpoint is used. Specify a distance in the search_radius parameter.
  • CLOSESTThe feature in the join features that is closest to a target feature is matched. See the usage tip for more information. Specify a distance in the search_radius parameter.
  • CLOSEST_GEODESICSame as CLOSEST except that geodesic distance is used rather than planar distance. Choose this if your data covers a large geographic extent or the coordinate system of the inputs is unsuitable for distance calculations
  • LARGEST_OVERLAPThe feature in the join features will be matched with the target feature with the largest overlap.
String
search_radius
(Optional)

Join features within this distance of a target feature will be considered for the spatial join. A search radius is only valid when the spatial relationship is specified (the match_option parameter is set to INTERSECT, WITHIN_A_DISTANCE, WITHIN_A_DISTANCE_GEODESIC, HAVE_THEIR_CENTER_IN, CLOSEST, or CLOSEST_GEODESIC). For example, using a search radius of 100 meters with the WITHIN_A_DISTANCE spatial relationship will join feature within 100 meters of a target feature. For the three WITHIN_A_DISTANCE relationships, if no value is specified for search_radius, a distance of 0 is used.

Linear Unit
distance_field_name
(Optional)

The name of a field, which will be added to the join, that contains the distance between the target feature and the closest join feature. This parameter is only valid when the spatial relationship is specified (match_option is set to CLOSEST or CLOSEST_GEODESIC. The value of this field is -1 if no feature is matched within a search radius. If no field name is specified, the field will not be added to the join.

String

Derived Output

NameExplanationData Type
out_feature_class

The updated input dataset.

Feature Class

Code sample

AddSpatialJoin example 1 (stand-alone script)

The following Python script demonstrates how to use the AddSpatialJoin function in a stand-alone script.

import os
import arcpy
arcpy.env.overwriteOutput = True

# Create hexagons
out_gdb = arcpy.env.scratchGDB
hex_fc = os.path.join(out_gdb, 'out_fc_hex_2')

arcpy.management.GenerateTessellation(
    hex_fc, '-10823285.769168 4836611.80759869 -10781728.9441187 4856999.87422328', 
    'HEXAGON', '17269676,2624 Unknown', arcpy.SpatialReference(3857))

# Create 2 random points in each hexagon
count_pts = 2
pts_fc = arcpy.management.CreateRandomPoints(
    out_gdb, 'out_fc_crp_2', constraining_feature_class=hex_fc, 
    number_of_points_or_field=count_pts)[0]

# Join the point attributes based on points within the hexagons
result = arcpy.management.AddSpatialJoin(
    hex_fc, pts_fc, '', '', 'CID', 'COMPLETELY_CONTAINS')
)

Licensing information

  • Basic: Yes
  • Standard: Yes
  • Advanced: Yes

Related topics