Associations.png file) or a document, that is associated with individual features in a geodatabase or feature layer.
| Association | Description | Geometry supported |
|---|---|---|
| Connectivity | Models 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 attachment | Models equipment attached to structures. A transformer bank may be attached to a pole, for example. | Yes |
| Containment | Models assets that contain other assets. A vault may contain valves and pipes, for example. | No |
// Get the elements associated (by containment) with a specified utility element.
val utilityAssociations = utilityNetwork.getAssociations(
element = utilityElement,
type = UtilityAssociationType.Containment
).getOrElse { error ->
return showError("Error getting associations: ${error.message}")
}
// Iterate all associations for this element.
utilityAssociations.forEach { utilityAssociation ->
// Get the first ("from") and second ("to") elements in the association.
val fromElement = utilityAssociation.fromElement
val toElement = utilityAssociation.toElement
}
You can also provide an envelope to find all valid associations within the specified extent.
The following example creates a new graphics overlay to display all associations within the map extent using a unique symbol
// Get the current viewpoint's extent.
val extent = currentViewpoint.targetGeometry.extent
// Create symbols for structural attachment and connectivity associations.
val attachmentSymbol = SimpleLineSymbol(SimpleLineSymbolStyle.Dot, Color.green, 5F)
val connectivitySymbol = SimpleLineSymbol(SimpleLineSymbolStyle.Dot, Color.red, 5F)
// Create a unique value renderer for the associations and apply it to the graphics overlay.
val attachmentValue = UniqueValue(
description = "Attachment",
symbol = attachmentSymbol,
values = listOf(UtilityAssociationType.Attachment.javaClass.simpleName)
)
val connectivityValue = UniqueValue(
description = "Connectivity",
symbol = connectivitySymbol,
values = listOf(UtilityAssociationType.Connectivity.javaClass.simpleName)
)
graphicsOverlay.renderer = UniqueValueRenderer(
fieldNames = listOf("AssociationType"),
uniqueValues = listOf(attachmentValue, connectivityValue)
)
// Get all of the associations in the current extent.
val utilityAssociations = utilityNetwork.getAssociations(extent).getOrElse { error ->
return showError("Error getting associations: ${error.message}")
}
utilityAssociations.forEach { utilityAssociation ->
// If it's not a containment relationship, add a graphic for the association.
if (utilityAssociation.associationType != UtilityAssociationType.Containment) {
val graphic = Graphic(utilityAssociation.geometry).apply {
attributes["GlobalId"] = utilityAssociation.globalId
attributes["AssociationType"] = utilityAssociation.associationType.javaClass.simpleName
}
graphicsOverlay.graphics.add(graphic)
}
}
Specifying a utility element
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