The Join Features tool transfers attributes from the features in one feed, layer, or table to other features in the same feed or to those of another feed or dataset based on spatial, temporal, and attribute relationships, or some combination of the three. Optionally, you can calculate statistics for the joined features.
- An analyst has data on crime incidents in a city. To analyze and study the impact of these crimes, it is necessary to understand the relationship the crime locations have with various city jurisdictions, such as school districts, police boundaries, and neighborhoods. Using the Join Features tool, additional information about each location can be appended to each crime and the impact on various jurisdictions can be further studied and analyzed.
- When a shipping vessel from one feed enters a moving severe weather cell of another feed, enrich the vessel with attributes from the severe weather event feature.
- You can join features based on a spatial relationship, a temporal relationship, an attribute relationship, or a combination of the three.If multiple features match the same target feature, you can determine if all the matching features will be joined (Join one to many) or if all the matching features will be summarized together (Join one to one) as follows:
The spatial relationship that determines if features are joined to each other. The available relationships depend on the geometry type (point, line, or area) of the layers being joined. Available spatial relationships include the following:
- near planar
- near geodesic
A target feature must satisfy its spatial relationship against all join features when exit has been specified and there is more than one join feature. For any other spatial relationship and where there is more than one join feature, a target feature can satisfy its spatial relationship to any individual join feature.
The temporal relationship that determines if features are joined to each other. The available relationships depend on the time type (instant or interval) of the layers being joined. Available temporal relationships include the following:
- met by
- overlapped by
- finished by
- started by
The attribute relationship that determines if features are joined to each other. Features are matched when the field values in the join layer are equal to field values in the target layer.
- Join one to one—This option summarizes all of the matching join features to each feature in the target layer. Only the target features that have a match will be included in the output. The count of joined features will be added, as well as other statistics such as sum, minimum, maximum, range, mean, variance, and standard deviation. Summary statistics can only be calculated if a Join one to one operation is specified.
- Join one to many—This option joins all the matching features in the join layer to the target layer. The resulting layer will contain multiple records of the target feature.
Examples of a one-to-many and one-to-one join are shown. In this example, the one-to-one join only includes the count; additional statistics that can be calculated are shown below in the How Join Features works - Calculations section.
When the Join operation parameter is set to Join one to many, there can be more than one row in the output feature class for each target feature.
- When configuring the Join Features tool in a one-to-one join, you can choose the only retain features that are joined or retain all features regardless of join results option.
- If you choose only retain features that are joined, only features that were able to successfully joined with a feature from the join dataset will be present in the output.
- If you choose retain all features regardless of join results, all features from the target dataset will exist in the output, regardless of whether there were any joined attributes.
- When retaining all features, if a feature is retained but there was no join for that feature, the COUNT value will be 0 and any summary field attribute values will be null.
- This option is only available for one-to-one joins.
- If target and join features are in different coordinate systems, the coordinate systems of the target feature will be used.
- If a join feature has a spatial relationship with multiple target features, it is counted as many times as it is matched with the target feature. For example, if a point is within three polygons, the point is counted three times, once for each polygon.
- When Spatial relationship is set to Near geodesic or Near planar, the target layer must be projected or the output coordinate system be set to a projected coordinate system.
- Optionally, build an expression to join features. If you specify an expression, only features that meet the condition will be used. For example, you can only join target features from the Magnitude field if greater than the join feature, with a field named Explosion, using the expression $target["Magnitude"] > $join["Explosion"]. Learn more about Arcade expressions with Join Features.
- When Spatial relationship is set to enter or exit in a real-time analytic, the following are true:
- The tool will operate in a stateful manner, which enables it to compare sequential observations to one another to detect a change in state, for example, whether the current condition is different from that of the previous observation. With other spatial relationships in real-time analytics, the tool does not need to compare any observations with previous observation, so it can run in a stateless manner, which is less resource intensive.
- When operating in a stateful manner, Join Features maintains a state store of the current observation for each Track ID. When a new observation arrives it is compared to the current observation of the same Track ID, if present. If the new observation has a newer timestamp than the current observation in the state store it will replace the current observation. If it has an identical timestamp to the current observation for the same Track ID the tool cannot distinguish between the two observations. This means the tool will not replace the current observation in the state store with the new observation, the new observation will not be added to the state store and future observations for this Track ID will be compared to the current observation that remained in the state store until a new observation arrives with a later timestamp. The tool will log a warning that this occurred.
- Checking First observation can trigger enter or First observation can trigger exit indicates that the first target feature received satisfies the filter condition if it is inside any join feature (in the case of enter) or outside (in the case of exit), despite having no prior target feature to which to compare the current target feature's location. The default is false (not checked).
- The Target Time Window parameter in real-time analytics should be at least as long as the longest anticipated interval between observations for any one track. Observations older than this duration will be removed from memory to manage resources.
- If a feed is connected to the join port, distance calculations will be performed dynamically based on the changing features in both the target and join feeds.
- In dynamic geofencing, the Join Time Window parameter must be set. If the join feed does not have a field tagged as END_TIME and the last known observation for a join feature is older than this window, it will be removed from the tool's memory and will not be included in the analysis. If the join feed has a field tagged as END_TIME, the feature will age out of the geofence store according to the value in the field tagged as END_TIME or when the join time window is closed, whichever comes first.
- Adding a join feed to a tool must be done in the model view. Analytics with tools using join feeds cannot be viewed or edited in the workflow view.
- Statistics are calculated for only those features that meet the specified spatial, temporal, or attribute relationship used in the Join one to one operation. You can calculate numeric and string statistics.
The target layer containing the features to process.
The layer whose features will be joined to those of the target layer.
Specifies whether the join will be one to one or one to many.
Retain all features
Specifies whether only the features in successful joins will be retained or all features will be retained regardless of whether there was a successful join for those features. This option is only available for one-to-one joins.
For one-to-many joins, this option is not available and only features with successful joins are returned.
If all features are retained, for features where there was not a join, the count will be 0 and any summary field values will be null.
Specifies the criteria used to spatially join features. This parameter is available if Spatial is checked.
Spatial near distance
Join features within this specified distance of a target feature to be considered for the spatial join. A spatial near distance is only valid when the spatial relationship is set to Near geodesic or Near planar.
Specifies the time criteria used to match features. This parameter is available if Temporal is checked. Different temporal criteria are available depending on Instant or Interval time features.
Temporal near distance
The amount of time between events. Joins will occur between events that occur within the time window of each other. This parameter is available if Temporal relationship is set to Near.
Joins features based on values in an attribute field. Specify which attribute field from the target layer matches an attribute field from the join layer. This parameter is available if Attribute is checked.
Specifies the statistics to be calculated on specified fields from the join features. Statistics are calculated for one-to-one joins. Different statistics are available depending on whether the specified field is a string, numeric, or date field.
Applies a condition to specified fields. Only features with fields that meet these conditions will be joined.
For example, you can apply a join to features in which the HealthSpendingattribute in the join layer is greater than 20 percent of the Income attribute in the target layer. The join condition to apply this expression is $join["HealthSpending"] > $target["Income"] * .2.
First observation can trigger enter/exit
Specifies whether the first target feature received satisfies the spatial relationship condition if it is inside any join feature in the case of enter or outside all join features in the case of exit, despite having no prior target feature to which to compare the current target feature's location. The default is false (not checked).
Change geometry of target feature to geometry of join feature
Changes the geometry of the target feature to the geometry of the join feature. For example, if the target feature is a point and the join feature it is joined with is a polygon, the target feature will assume the polygon geometry of the join feature. The default is false.
If the target feature does not have a geometry, it will assume the geometry of the join feature it is joined with.
If the target feature has a geometry and the join feature it is joined with does not have a geometry, the target feature will lose its geometry and become tabular.
This parameter is not valid when Retain all features is set to true. Output features cannot have different geometries.
Target Time window
Specify a value at least as long as the longest anticipated interval between observations for any given track. Observations older than this duration will be removed from memory to manage resources.
This parameter is only valid when Spatial relationship is set to enter or exit.
Join Time window
The time window for the join feed (dynamic geofencing). If the last known observation for a join feature is older than the time window specified, it will be removed and will not be included in the analysis. If the join feed has a field tagged as END_TIME, this parameter is optional.
Considerations and limitations
- Summary statistics will only be calculated if the Join one to one operation is specified.
- The COUNT field name will be used to represent the number of joined features for a one-to-one join. If the COUNT field name exists in the target schema, the field will be called join_COUNT. If you're performing multiple consecutive joins, the field names will be COUNT, join_COUNT, join_COUNT1, join_COUNT2, and so on to avoid field name conflicts.