/* * This method executes a utility network trace to find all the low voltage service points * serviced by the specified transformer and returns the service points global IDs */ private IStringArray FindLVServicePoints(string xfrGlobalID) { //Get required Utility Network interfaces IBaseNetwork unBaseNetwork = (IBaseNetwork)unDataset; IDatasetComponent datasetComponent = (IDatasetComponent)unDataset; IDEDataset deDataset = datasetComponent.DataElement; IDEBaseNetwork deBaseNetwork = (IDEBaseNetwork)deDataset; IDEUtilityNetwork deUtilityNetwork = (IDEUtilityNetwork)deBaseNetwork; IDataElement deElement = (IDataElement)deDataset; //Create and initialize network tracer IUtilityNetworkQuery unQry = unBaseNetwork.CreateQuery(); ITracer unTracer = unBaseNetwork.CreateTracer(); unTracer.Initialize(unQry, (IDataElement)deDataset); // Add transformer as trace starting point IStringArray startGUID = new StrArrayClass(); startGUID.Add(xfrGlobalID); ILongArray startTerm = new LongArrayClass(); startTerm.Add(MV_XFR_TERMINAL_ID); unTracer.AddTraceLocationForJunctionFeatures(esriTraceLocationType.esriTLTStartingPoint, startGUID, startTerm); // Configure trace parameters UNTraceConfiguration traceConfig = new UNTraceConfiguration(); traceConfig.IgnoreBarriersAtStartingPoints = true; traceConfig.IncludeContainers = false; traceConfig.IncludeBarriers = false; traceConfig.IncludeContent = true; traceConfig.IncludeIsolated = false; traceConfig.IncludeStructures = false; traceConfig.IncludeUpToFirstSpatialContainer = false; traceConfig.DomainNetworkName = DOMAIN_NETWORK; traceConfig.TierName = MV_TIER_NAME; traceConfig.TargetTierName = MV_TIER_NAME; traceConfig.TraversabilityScope = esriTraversabilityScope.esriTSJunctionsAndEdges; traceConfig.FilterScope = esriTraversabilityScope.esriTSJunctionsAndEdges; traceConfig.ValidateConsistency = false; // Add output filter to only return service points IArray outFilters = new ArrayClass(); for (int i = 0; i < LV_SERVICE_ASSETTYPES.Length; i++) { UNOutputFilter outFilter = new UNOutputFilter(); outFilter.NetworkSourceID = DEVICE_SOURCE_ID; outFilter.AssetGroupCode = LV_SERVICE_ASSETGROUP; outFilter.AssetTypeCode = LV_SERVICE_ASSETTYPES[i]; outFilters.Add(outFilter); } traceConfig.OutputFilters = outFilters; unTracer.TraceConfiguration = (ITraceConfiguration)traceConfig; // Execute the trace long[] jEid = new long[1]; long[] eEid = new long[1]; unTracer.Trace(esriUtilityNetworkTraceType.esriUNTTDownstream, out jEid, out eEid); // Get features from returned elements IUNTraceResults unTraceResults = (IUNTraceResults)unTracer; ILongArray junctionNetworkSourceIDs = new LongArrayClass(); IStringArray junctionGlobalIDs = new StrArrayClass(); ILongArray junctionObjectIDs = new LongArrayClass(); ILongArray junctionTerminalIDs = new LongArrayClass(); ILongArray junctionAssetGroupCodes = new LongArrayClass(); ILongArray junctionAssetTypeCodes = new LongArrayClass(); ILongArray edgeNetworkSourceIDs = new LongArrayClass(); IStringArray edgeGlobalIDs = new StrArrayClass(); ILongArray edgeObjectIDs = new LongArrayClass(); ILongArray edgeAssetGroupCodes = new LongArrayClass(); ILongArray edgeAssetTypeCodes = new LongArrayClass(); unTraceResults.TraceResultFeatures(out junctionNetworkSourceIDs, out junctionGlobalIDs, out junctionObjectIDs, out junctionTerminalIDs, out junctionAssetGroupCodes, out junctionAssetTypeCodes, out edgeNetworkSourceIDs, out edgeGlobalIDs, out edgeObjectIDs, out edgeAssetGroupCodes, out edgeAssetTypeCodes); return(junctionGlobalIDs); }