Trace
Trace type
Use one of the supported traces (such as upstream, downstream, subnetwork, and so on) to create the parameters with starting locations. Refer to the Trace a utility network overview for a description of the supported trace types.
let traceParameters = UtilityTraceParameters(traceType: .downstream, startingLocations: startingLocations)
Trace locations
A trace location can be one of the following:
- Starting point
- Barrier
-
Filter barrier
A filter barrier is a setting in a trace configuration that specifies when an isolation trace will stop for a specific category or network attribute.
All of the traces except shortest path require at least one starting point. Barriers are optional. A filter barrier is only required for an isolation traceUtilityElement objects that can be created as explained in the Analyze your network topic.
Once you have a utility element
traceParameters.addStartingLocation(startingElement)
traceParameters.addBarrier(barrierElement)
traceParameters.addFilterBarrier(filterBarrierElement)
Trace configuration
A trace configuration allows you to do things like:
- Stop the trace at protective devices if they are open. For example, the flow of electricity in a network will be stopped if a fuse is open.
- Control the types of features traced. For example, trace only pipes with a diameter greater than six inches.
- Filter the types of features returned as trace results. For example, only return elements identified by the trace that represent wooden poles.
- Define functions to run calculations on network attributes
Attributes are fields and values for a single feature or non-spatial record. They are typically stored in a database or service such as a feature service. associated with traced features. For example, the sum of the length of all the wire traced. Several functions can be specified for a trace.
See the Trace configuration topic for more information.
Below is an example of trace configuration for isolation trace.
let traceConfiguration = UtilityTraceConfiguration()
traceConfiguration.domainNetwork = utilityNetwork.definition?.domainNetwork(named: ("Water"))
traceConfiguration.sourceTier = traceConfiguration.domainNetwork?.tier(named: "Water Pressure")
let filter = UtilityTraceFilter()
let barriers = UtilityCategoryComparison(categoryName: "Isolating", operator: .exists)
filter.barriers = barriers
traceConfiguration.filter = filter
traceParameters.traceConfiguration = traceConfiguration
Trace results
You can add a variety of trace result types (UtilityTraceParameters.ResultType) to the UtilityTraceParameters result types collection to define the results returned from a trace. At least one type of trace result is required, but you can request several.
- Element results—Provide information about the individual network features. This is the default result returned.
- Function results—Calculate values based on network attributes
Attributes are fields and values for a single feature or non-spatial record. They are typically stored in a database or service such as a feature service. . Note that this type of result requires your trace configuration to include function inputs. - Geometry results—Allow you to display the results on the map. This result type is supported by ArcGIS Enterprise
ArcGIS Enterprise is a GIS mapping, analytics, data hosting, and content management product that can be hosted on-premise or in a cloud infrastructure. It includes software, applications, tools, APIs, and services for users and developers. 10.8.1 or later and for mobile geodatabaseA mobile geodatabase (.geodatabase) is a spatial data storage format in a single file on disk that can store, query, and manage spatial and nonspatial data. In applications built with the ArcGIS Maps SDKs for Native Apps, mobile geodatabases can be used in offline workflows when taking maps and features offline from services or in desktop-based scenarios as standalone mobile geodatabases from ArcGIS Pro. , you need ArcGIS Maps SDKs for Native Apps version 200.1 or later.
See the Work with trace results topic for more information about trace results.
The following example shows creating a trace function, including it with the trace configuration, and requesting its result in the output.
guard let shapeLengthAttribute = utilityNetwork.definition?.networkAttribute(named: ("Shape length")) else { return }
let addShapeLength = UtilityTraceFunction(functionType: .add, networkAttribute: shapeLengthAttribute)
traceParameters.traceConfiguration?.addFunction(addShapeLength)
traceParameters.addResultType(.functionOutputs)