top of page

Understanding Associations in ESRI Utility Network with Telecom Dataset

Managing and analyzing a telecom network—with its complex web of fibers, conduits, handholes, and terminals—requires more than simple geometric connections. The Esri Utility Network Extension revolutionizes utility and telecom modeling with a foundational concept: Associations.

This blog post explores the four types of associations, demonstrates how to implement them using a telecom dataset, and shares ArcPy/Python snippets to work with them programmatically.

Utility Networks
Utility Networks


🔍 What are Associations?


In a Utility Network, associations define relationships that can't always be represented spatially (like with lines and junctions). These include:

  1. Connectivity Association – Connects features that aren’t touching (e.g., fiber port to cable).

  2. Containment Association – Groups features within a container (e.g., a handhole containing cables).

  3. Structural Attachment Association – Attaches features physically to others (e.g., fiber cable attached to a pole).

  4. Association Role – Defines a parent-child role between the two features.


📡 Telecom Scenario Overview


Imagine a simple telecom fiber network:

  • Poles: Structural features

  • Handholes: Container features

  • Fiber Cables: Linear assets

  • Terminals: Endpoints or interfaces

  • Splice Closures: Junctions

  • Fiber Ports: Junction objects inside terminals


⚙️ Creating Associations with Python (ArcPy)


First, ensure you're using ArcGIS Pro with a licensed Utility Network and valid feature classes.

import arcpy

# Set your environment
arcpy.env.workspace = r"C:\GIS\TelecomUN.gdb"
arcpy.env.overwriteOutput = True

# Enable utility network
un = "UtilityNetwork"

1️⃣ Connectivity Association – Fiber Port to Cable


This connects a Fiber Port (junction object) to a Fiber Cable (edge), even if they don’t touch geometrically.

arcpy.un.CreateAssociation(
    utility_network=un,
    association_type="Connectivity",
    from_global_id="{GUID_PORT}",
    to_global_id="{GUID_CABLE}"
)

Use case: Connect a fiber port in a terminal to a fiber cable that enters a handhole.

2️⃣ Containment Association – Handhole Containing Terminals and Cables


A handhole contains multiple items, like fiber terminals and cables.

arcpy.un.CreateAssociation(
    utility_network=un,
    association_type="Containment",
    from_global_id="{GUID_HANDHOLE}",
    to_global_id="{GUID_TERMINAL}",
    association_role="Content"
)

Add additional contents (like cables):

arcpy.un.CreateAssociation(
    utility_network=un,
    association_type="Containment",
    from_global_id="{GUID_HANDHOLE}",
    to_global_id="{GUID_CABLE}"
)

3️⃣ Structural Attachment Association – Pole to Fiber Cable


You might need to show that a fiber cable is attached to a pole.

arcpy.un.CreateAssociation(
    utility_network=un,
    association_type="StructuralAttachment",
    from_global_id="{GUID_POLE}",
    to_global_id="{GUID_CABLE}"
)

This improves visibility of network structures like aerial fiber deployments.


🔄 Querying Existing Associations


You can list associations using Describe on the utility network.

un_desc = arcpy.Describe(un)
for assoc in un_desc.associations:
    print(f"Type: {assoc.associationType}, From: {assoc.fromGlobalId}, To: {assoc.toGlobalId}")

🧩 Working with Feature GUIDs


You can retrieve the Global IDs using an attribute query:

def get_global_id(fc, where_clause):
    with arcpy.da.SearchCursor(fc, ["GLOBALID"], where_clause) as cursor:
        for row in cursor:
            return str(row[0])

Usage:

guid_handhole = get_global_id("Handholes", "AssetID = 'HH1001'")
guid_terminal = get_global_id("Terminals", "AssetID = 'TM2001'")

📈 Why Associations Matter in Telecom


  • ✅ Enables complex modeling without excessive geometric clutter

  • ✅ Supports tracing through logical (not just spatial) connections

  • ✅ Improves visual clarity for operators and planners

  • ✅ Supports real-world business logic (e.g., what’s inside that handhole?)


🔒 Final Tips for Working with Associations


  • Associations only work on valid utility network feature classes and objects.

  • After modifying associations, validate the network topology:

arcpy.un.ValidateNetworkTopology(un, "EntireExtent")
  • Ensure editing is done in a versioned environment or using branch versioning.


📚 Conclusion


The Esri Utility Network’s association model is a game-changer for modeling real-world telecom infrastructure. From mapping physical enclosures like handholes to logical paths between ports and cables, associations help you bridge the spatial and non-spatial world of network assets.


Write to us at bd@agilytics.in for the expertise.


Comments


bottom of page