Associations An association is a relationship between two elements that is reflected in a utility network topology. Learn more enable the modeling of connectivity, containment, and structure attachment An attachment is a file, such as a photograph (for example, a .png file) or a document, that is associated with individual features in a geodatabase or feature layer. Learn more between non-spatial and non-coincident network features. The following table describes the types of relationships between two utility network elements:

AssociationDescriptionGeometry supported
ConnectivityModels the connectivity between two junctions that don’t have geometric coincidence (are not in the same x, y and z location). A transformer may be connected to a fuse, for example.Yes
Structural attachmentModels equipment attached to structures. A transformer bank may be attached to a pole, for example.Yes
ContainmentModels assets that contain other assets. A vault may contain valves and pipes, for example.No

Utility network associations

// Get the elements associated with a single utility element (using containment).
do {
let associations = try await utilityNetwork.associations(for: utilityElement, ofKind: .containment)
for association in associations {
let fromElement = association.fromElement
let toElement = association.toElement
}
} catch {
print("Error getting associations.")
}

You can also provide an envelope to find all valid associations within the specified extent.

The following shows a graphics overlay to display all associations within the map extent using a unique symbol for each association type.

// Create a graphics overlay for associations.
let associationsOverlay = GraphicsOverlay()
// Create symbols for the attachment and connectivity associations.
let attachmentSymbol = SimpleLineSymbol(style: .dot, color: .green, width: 5)
let connectivitySymbol = SimpleLineSymbol(style: .dot, color: .red, width: 5)
// Create a unique value renderer for the associations and apply it to the graphics overlay.
let attachmentValue = UniqueValue(description: "Attachment", symbol: attachmentSymbol, values: [UtilityAssociation.Kind.attachment])
let connectivityValue = UniqueValue(description: "Connectivity", symbol: connectivitySymbol, values: [UtilityAssociation.Kind.connectivity])
let renderer = UniqueValueRenderer(fieldNames: ["AssociationType"], uniqueValues: [attachmentValue, connectivityValue])
associationsOverlay.renderer = renderer
let currentExtent = currentViewpoint.targetGeometry.extent
do {
// Get all of the associations for the current extent.
let associations = try await utilityNetwork.associations(forExtent: currentExtent)
for association in associations where association.kind != .containment {
let graphic = Graphic()
graphic.setAttributeValue(association.globalID, forKey: "GlobalId")
graphic.setAttributeValue(association.globalID, forKey: "AssociationType")
associationsOverlay.addGraphic(graphic)
}
} catch {
print("Error getting associations.")
}

Specifying a utility element A utility element is an entity in a utility network that corresponds to a feature or a part of a feature (for example, a terminal inside a device). Learn more will return all its associations unless the utility element’s terminal A terminal represents logical ports, entries, or exit locations on a single device or junction object within a utility network. Each port can flow in or out. Each device can contain many terminals, all of which can be interconnected. Learn more has been set, which limits the connectivity associations returned.

Specifying an extent will return all its connectivity or structural attachment associations with geometry. The geometry value (polyline) represents the connection relationship between a from element and a to element. You can use the geometry to visualize the association as a graphic A graphic is a visual element composed of a geometry, symbol, and attributes that is displayed on a map or scene. Learn more in the map.