-
Notifications
You must be signed in to change notification settings - Fork 117
ProSnippets UtilityNetwork
arcgisprosdk edited this page Feb 7, 2018
·
14 revisions
Language: C#
Subject: UtilityNetwork
Contributor: ArcGIS Pro SDK Team <[email protected]>
Organization: esri, http://www.esri.com
Date: 12/22/2017
ArcGIS Pro: 2.1
Visual Studio: 2015, 2017
.NET Target Framework: 4.6.1
public static UtilityNetwork GetUtilityNetworkFromTable(Table table)
{
if (table.IsControllerDatasetSupported())
{
// Tables can belong to multiple controller datasets, but at most one of them will be a UtilityNetwork
IReadOnlyList<Dataset> controllerDatasets = table.GetControllerDatasets();
foreach (Dataset controllerDataset in controllerDatasets)
{
if (controllerDataset is UtilityNetwork)
{
return controllerDataset as UtilityNetwork;
}
}
}
return null;
}
// This routine obtains a utility network from a FeatureLayer, SubtypeGroupLayer, or UtilityNetworkLayer
public static UtilityNetwork GetUtilityNetworkFromLayer(Layer layer)
{
if (layer is UtilityNetworkLayer)
{
UtilityNetworkLayer utilityNetworkLayer = layer as UtilityNetworkLayer;
return utilityNetworkLayer.GetUtilityNetwork();
}
else if (layer is SubtypeGroupLayer)
{
CompositeLayer compositeLayer = layer as CompositeLayer;
return GetUtilityNetworkFromLayer(compositeLayer.Layers.First());
}
else if (layer is FeatureLayer)
{
FeatureLayer featureLayer = layer as FeatureLayer;
using (FeatureClass featureClass = featureLayer.GetFeatureClass())
{
if (featureClass.IsControllerDatasetSupported())
{
IReadOnlyList<Dataset> controllerDatasets = featureClass.GetControllerDatasets();
foreach (Dataset controllerDataset in controllerDatasets)
{
if (controllerDataset is UtilityNetwork)
{
return controllerDataset as UtilityNetwork;
}
}
}
}
}
return null;
}
UtilityNetworkDefinition utilityNetworkDefinition = utilityNetwork.GetDefinition();
DomainNetwork domainNetwork = utilityNetworkDefinition.GetDomainNetwork(domainNetworkName);
Tier tier = domainNetwork.GetTier(tierName);
SubnetworkManager subnetworkManager = utilityNetwork.GetSubnetworkManager();
IReadOnlyList<Subnetwork> subnetworks = subnetworkManager.GetSubnetworks(tier, SubnetworkStates.Dirty | SubnetworkStates.DirtyAndDeleted);
foreach (Subnetwork subnetwork in subnetworks)
{
subnetwork.Update();
}
TraceManager traceManager = utilityNetwork.GetTraceManager();
DownstreamTracer downstreamTracer = traceManager.GetTracer<DownstreamTracer>();
IReadOnlyList<Element> startingPointList = new List<Element>();
// Code to fill in list of starting points goes here...
TraceArgument traceArgument = new TraceArgument(startingPointList);
TraceConfiguration traceConfiguration = new TraceConfiguration();
// Code to fill in trace configuration goes here...
traceArgument.Configuration = traceConfiguration;
// Create a NetworkAttribute object for the Lifecycle network attribute from the UtilityNetworkDefinition
NetworkAttribute lifecycleNetworkAttribute = utilityNetworkDefinition.GetNetworkAttribute("Lifecycle");
// Create a NetworkAttributeComparison that stops traversal if Lifecycle <> "In Design" (represented by the constant InDesign)
NetworkAttributeComparison inDesignNetworkAttributeComparison = new NetworkAttributeComparison(lifecycleNetworkAttribute, Operator.NotEqual, InDesign);
// Create a NetworkAttributeComparison to stop traversal if Lifecycle <> "In Service" (represented by the constant InService)
NetworkAttributeComparison inServiceNetworkAttributeComparison = new NetworkAttributeComparison(lifecycleNetworkAttribute, Operator.NotEqual, InService);
// Combine these two comparisons together with "And"
And lifecycleFilter = new And(inDesignNetworkAttributeComparison, inServiceNetworkAttributeComparison);
// Final condition stops traversal if Lifecycle <> "In Design" and Lifecycle <> "In Service"
traceConfiguration.Traversability.Barriers = lifecycleFilter;
// Get a NetworkAttribute object for the Load network attribute from the UtilityNetworkDefinition
NetworkAttribute loadNetworkAttribute = utilityNetworkDefintion.GetNetworkAttribute("Load");
// Create a function to sum the Load
Add sumLoadFunction = new Add(loadNetworkAttribute);
// Add this function to our trace configuration
traceConfiguration.Functions = new List<Function>() { sumLoadFunction };
// Create a NetworkAttribute object for the Shape length network attribute from the UtilityNetworkDefinition
NetworkAttribute shapeLengthNetworkAttribute = utilityNetworkDefinition.GetNetworkAttribute("Shape length");
// Create a function that adds up shape length
Function lengthFunction = new Add(shapeLengthNetworkAttribute);
// Create a function barrier that stops traversal after 1000 feet
FunctionBarrier distanceBarrier = new FunctionBarrier(lengthFunction, Operator.GreaterThan, 1000.0);
// Set this function barrier
traceConfiguration.Traversability.FunctionBarriers = new List<FunctionBarrier>() { distanceBarrier };
// Create an output category to filter the trace results to only include
// features with the "Service Point" category assigned
traceConfiguration.OutputCondition = new CategoryComparison(CategoryOperator.IsEqual, "Service Point");
// Get a NetworkAttribute object for the Phases Normal attribute from the UtilityNetworkDefinition
NetworkAttribute normalPhaseAttribute = utilityNetworkDefinition.GetNetworkAttribute("Phases Normal");
// Create a propagator to propagate the Phases Normal attribute downstream from the source, using a Bitwise And function
// Allow traversal to continue as long as the Phases Normal value includes any of the ABC phases
// (represented by the constant ABCPhase)
Propagator phasePropagator = new Propagator(normalPhaseAttribute, PropagatorFunction.BitwiseAnd, Operator.IncludesAny, ABCPhase);
// Assign this propagator to our trace configuration
traceConfiguration.Propagators = new List<Propagator>() { phasePropagator };
// Get the FunctionOutputResult from the trace results
FunctionOutputResult functionOutputResult = traceResults.OfType<FunctionOutputResult>().First();
// First() can be used here if only one Function was included in the TraceConfiguration.Functions collection.
// Otherwise you will have to search the list for the correct FunctionOutput object.
FunctionOutput functionOutput = functionOutputResult.FunctionOutputs.First();
// Extract the total load from the GlobalValue property
double totalLoad = (double)functionOutput.Value;
public List<NetworkDiagram> GetInconsistentDiagrams(UtilityNetwork utilityNetwork)
{
// Get the DiagramManager from the utility network
DiagramManager diagramManager = utilityNetwork.GetDiagramManager();
List<NetworkDiagram> myList = new List<NetworkDiagram>();
// Loop through the network diagrams in the diagram manager
foreach (NetworkDiagram diagram in diagramManager.GetNetworkDiagrams())
{
NetworkDiagramInfo diagramInfo = diagram.GetDiagramInfo();
// If the diagram is not a system diagram and is in an inconsistent state, add it to our list
if (!diagramInfo.IsSystem && diagram.GetConsistencyState() != NetworkDiagramConsistencyState.DiagramIsConsistent)
{
myList.Add(diagram);
}
}
return myList;
}
public void RetrieveDiagramElements(MapView mapView, NetworkDiagram networkDiagram)
{
// Create a DiagramElementQueryByExtent to retrieve diagram element junctions whose extent
// intersects the active map extent
DiagramElementQueryByExtent elementQuery = new DiagramElementQueryByExtent();
elementQuery.ExtentOfInterest = MapView.Active.Extent;
elementQuery.AddContents = false;
elementQuery.QueryDiagramJunctionElement = true;
elementQuery.QueryDiagramEdgeElement = false;
elementQuery.QueryDiagramContainerElement = false;
// Use this DiagramElementQueryByExtent as an argument to the QueryDiagramElements method
DiagramElementQueryResult result = networkDiagram.QueryDiagramElements(elementQuery);
}
public void DiagramElementQueryResultAndNetworkDiagramSubsetClasses(Geodatabase geodatabase, DiagramManager diagramManager, string diagramName)
{
// Retrieve a diagram
NetworkDiagram diagramTest = diagramManager.GetNetworkDiagram(diagramName);
// Create a DiagramElementQueryByElementTypes query object to get the diagram elements we want to work with
DiagramElementQueryByElementTypes query = new DiagramElementQueryByElementTypes();
query.QueryDiagramJunctionElement = true;
query.QueryDiagramEdgeElement = true;
query.QueryDiagramContainerElement = true;
// Retrieve those diagram elements
DiagramElementQueryResult elements = diagramTest.QueryDiagramElements(query);
// Create a NetworkDiagramSubset object to edit this set of diagram elements
NetworkDiagramSubset subset = new NetworkDiagramSubset();
subset.DiagramJunctionElements = elements.DiagramJunctionElements;
subset.DiagramEdgeElements = elements.DiagramEdgeElements;
subset.DiagramContainerElements = elements.DiagramContainerElements;
// Edit the shapes of the diagram elements - left as an exercise for the student
TranslateDiagramElements(subset);
// Save the new layout of the diagram elements
diagramTest.SaveLayout(subset, true);
}
Home | API Reference | Requirements | Download | Samples
-
Create a utility network association
-
Create utility network features and associations in a single edit operation
-
Get traverse associations result from downward traversal
-
Get traverse associations result from upward traversal with depth limit
-
Find a Tier given a Domain Network name and Tier name
-
Update all dirty subnetworks in a tier
-
Life cycle for a simple radial subnetwork with one controller
-
Life cycle for a mesh subnetwork with multiple controllers
-
Life cycle for a multifeed radial subnetwork with two controllers
-
Export Subnetwork
-
Create a DownstreamTracer
-
Create a Trace Argument
-
Create a Condition to compare a Network Attribute against a set of values
-
Create a Function
-
Create a FunctionBarrier
-
Create an output condition
-
Create a Propagator
-
Using Function Results
-
Fetch a named trace configuration by name
-
Fetch named trace configurations from a utility network layer
-
Trace a utility network using a named trace configuration
-
Trace a utility network with the digitized direction
-
Export a utility network trace as a JSON file
-
Fetch features and network attributes from a utility network during trace
-
Get selected features from a list of elements
-
Get the Diagram Manager
-
Get Network Diagrams
-
Get a list of Network Diagrams with inconsistent ConsistencyState
-
Open a diagram pane from a Network Diagram
-
Get Diagram from DiagramLayer
-
Get Diagram Templates
-
Get Network Diagrams from a Diagram Template
-
Create a Network Diagram
-
Get Network Diagram Information as JSON string
-
Get Diagram Elements
-
Get Diagram Aggregations
-
Find Diagram Features for a set of utility network rows
-
Find Utility Network Rows for a set of diagram features
-
Find Initial Network Rows Used to create a Network Diagram
-
Change the Layout of a Network Diagram
-
Editing Network Diagram