private async void OnTrace(object sender, EventArgs e) { try { // Update the UI. _activityIndicator.StartAnimating(); _statusLabel.Text = $"Running {_utilityTraceType.ToString().ToLower()} trace..."; // Clear previous selection from the layers. _myMapView.Map.OperationalLayers.OfType <FeatureLayer>().ToList().ForEach(layer => layer.ClearSelection()); // Build trace parameters. UtilityTraceParameters parameters = new UtilityTraceParameters(_utilityTraceType, _startingLocations); foreach (UtilityElement barrier in _barriers) { parameters.Barriers.Add(barrier); } // Set the trace configuration using the tier from the utility domain network. parameters.TraceConfiguration = _mediumVoltageTier.TraceConfiguration; // Get the trace result from the utility network. IEnumerable <UtilityTraceResult> traceResult = await _utilityNetwork.TraceAsync(parameters); UtilityElementTraceResult elementTraceResult = traceResult?.FirstOrDefault() as UtilityElementTraceResult; // Check if there are any elements in the result. if (elementTraceResult?.Elements?.Count > 0) { foreach (FeatureLayer layer in _myMapView.Map.OperationalLayers.OfType <FeatureLayer>()) { IEnumerable <UtilityElement> elements = elementTraceResult.Elements.Where(element => element.NetworkSource.Name == layer.FeatureTable.TableName); IEnumerable <Feature> features = await _utilityNetwork.GetFeaturesForElementsAsync(elements); layer.SelectFeatures(features); } } _statusLabel.Text = "Trace completed."; } catch (Exception ex) { _statusLabel.Text = "Trace failed..."; if (ex is ArcGISWebException && ex.Message == null) { new UIAlertView(ex.GetType().Name, "Trace failed.", (IUIAlertViewDelegate)null, "OK", null).Show(); } else { new UIAlertView(ex.GetType().Name, ex.Message, (IUIAlertViewDelegate)null, "OK", null).Show(); } } finally { _activityIndicator.StopAnimating(); } }
private async void Trace_Click(object sender, EventArgs e) { try { _progressBar.Visibility = Android.Views.ViewStates.Visible; _status.Text = "Running connected trace..."; // Verify that the parameters contain a starting location. if (_parameters == null || !_parameters.StartingLocations.Any()) { throw new Exception("No starting locations set."); } // Get the trace result from the utility network. IEnumerable <UtilityTraceResult> traceResult = await _utilityNetwork.TraceAsync(_parameters); UtilityElementTraceResult elementTraceResult = traceResult?.FirstOrDefault() as UtilityElementTraceResult; if (elementTraceResult?.Elements?.Count > 0) { // Clear previous selection from the layer. _myMapView.Map.OperationalLayers.OfType <FeatureLayer>().ToList().ForEach(layer => layer.ClearSelection()); // Group the utility elements by their network source. IEnumerable <IGrouping <string, UtilityElement> > groupedElementsResult = from element in elementTraceResult.Elements group element by element.NetworkSource.Name into groupedElements select groupedElements; foreach (IGrouping <string, UtilityElement> elementGroup in groupedElementsResult) { // Get the layer for the utility element. FeatureLayer layer = (FeatureLayer)_myMapView.Map.OperationalLayers.FirstOrDefault(l => l is FeatureLayer && ((FeatureLayer)l).FeatureTable.TableName == elementGroup.Key); if (layer == null) { continue; } // Convert elements to features to highlight result. IEnumerable <Feature> features = await _utilityNetwork.GetFeaturesForElementsAsync(elementGroup); layer.SelectFeatures(features); } } _status.Text = "Trace completed."; } catch (Exception ex) { _status.Text = "Trace failed..."; CreateDialog(ex.Message); } finally { _progressBar.Visibility = Android.Views.ViewStates.Invisible; } }
private async void OnTrace(object sender, RoutedEventArgs e) { try { LoadingBar.Visibility = Visibility.Visible; // Clear previous selection from the layers. MyMapView.Map.OperationalLayers.OfType <FeatureLayer>().ToList().ForEach(layer => layer.ClearSelection()); if (Categories.SelectedItem is UtilityCategory category) { // NOTE: UtilityNetworkAttributeComparison or UtilityCategoryComparison with Operator.DoesNotExists // can also be used. These conditions can be joined with either UtilityTraceOrCondition or UtilityTraceAndCondition. UtilityCategoryComparison categoryComparison = new UtilityCategoryComparison(category, UtilityCategoryComparisonOperator.Exists); // Add the filter barrier. _configuration.Filter.Barriers = categoryComparison; } // Set the include isolated features property. _configuration.IncludeIsolatedFeatures = IncludeIsolatedFeatures.IsChecked == true; // Build parameters for isolation trace. UtilityTraceParameters parameters = new UtilityTraceParameters(UtilityTraceType.Isolation, new[] { _startingLocation }); parameters.TraceConfiguration = _configuration; // Get the trace result from trace. IEnumerable <UtilityTraceResult> traceResult = await _utilityNetwork.TraceAsync(parameters); UtilityElementTraceResult elementTraceResult = traceResult?.FirstOrDefault() as UtilityElementTraceResult; // Select all the features from the result. if (elementTraceResult?.Elements?.Count > 0) { foreach (FeatureLayer layer in MyMapView.Map.OperationalLayers.OfType <FeatureLayer>()) { IEnumerable <UtilityElement> elements = elementTraceResult.Elements.Where(element => element.NetworkSource.Name == layer.FeatureTable.TableName); IEnumerable <Feature> features = await _utilityNetwork.GetFeaturesForElementsAsync(elements); layer.SelectFeatures(features); } } } catch (Exception ex) { await new MessageDialog(ex.Message, ex.GetType().Name).ShowAsync(); } finally { LoadingBar.Visibility = Visibility.Collapsed; } }
private async void OnTrace(object sender, EventArgs e) { try { _loadingView.StartAnimating(); // Clear previous selection from the layers. _myMapView.Map.OperationalLayers.OfType <FeatureLayer>().ToList().ForEach(layer => layer.ClearSelection()); if (_selectedCategory != null) { // NOTE: UtilityNetworkAttributeComparison or UtilityCategoryComparison with Operator.DoesNotExists // can also be used. These conditions can be joined with either UtilityTraceOrCondition or UtilityTraceAndCondition. UtilityCategoryComparison categoryComparison = new UtilityCategoryComparison(_selectedCategory, UtilityCategoryComparisonOperator.Exists); // Add the filter barrier. _configuration.Filter.Barriers = categoryComparison; } // Set the include isolated features property. _configuration.IncludeIsolatedFeatures = _featuresSwitch.On; // Build parameters for isolation trace. UtilityTraceParameters parameters = new UtilityTraceParameters(UtilityTraceType.Isolation, new[] { _startingLocation }); parameters.TraceConfiguration = _configuration; // Get the trace result from trace. IEnumerable <UtilityTraceResult> traceResult = await _utilityNetwork.TraceAsync(parameters); UtilityElementTraceResult elementTraceResult = traceResult?.FirstOrDefault() as UtilityElementTraceResult; // Select all the features from the result. if (elementTraceResult?.Elements?.Count > 0) { foreach (FeatureLayer layer in _myMapView.Map.OperationalLayers.OfType <FeatureLayer>()) { IEnumerable <UtilityElement> elements = elementTraceResult.Elements.Where(element => element.NetworkSource.Name == layer.FeatureTable.TableName); IEnumerable <Feature> features = await _utilityNetwork.GetFeaturesForElementsAsync(elements); layer.SelectFeatures(features); } } } catch (Exception ex) { new UIAlertView(ex.GetType().Name, ex.Message, (IUIAlertViewDelegate)null, "OK", null).Show(); } finally { _loadingView.StopAnimating(); } }
private async void Initialize() { try { // Disable the UI. FilterOptions.Visibility = Visibility.Collapsed; // Create and load the utility network. _utilityNetwork = await UtilityNetwork.CreateAsync(new Uri(FeatureServiceUrl)); // Create a map with layers in this utility network. MyMapView.Map = new Map(Basemap.CreateStreetsNightVector()); MyMapView.Map.OperationalLayers.Add(new FeatureLayer(new Uri($"{FeatureServiceUrl}/{LineLayerId}"))); MyMapView.Map.OperationalLayers.Add(new FeatureLayer(new Uri($"{FeatureServiceUrl}/{DeviceLayerId}"))); // Get a trace configuration from a tier. UtilityDomainNetwork domainNetwork = _utilityNetwork.Definition.GetDomainNetwork(DomainNetworkName) ?? throw new ArgumentException(DomainNetworkName); UtilityTier tier = domainNetwork.GetTier(TierName) ?? throw new ArgumentException(TierName); _configuration = tier.TraceConfiguration; // Create a trace filter. _configuration.Filter = new UtilityTraceFilter(); // Get a default starting location. UtilityNetworkSource networkSource = _utilityNetwork.Definition.GetNetworkSource(NetworkSourceName) ?? throw new ArgumentException(NetworkSourceName); UtilityAssetGroup assetGroup = networkSource.GetAssetGroup(AssetGroupName) ?? throw new ArgumentException(AssetGroupName); UtilityAssetType assetType = assetGroup.GetAssetType(AssetTypeName) ?? throw new ArgumentException(AssetTypeName); Guid globalId = Guid.Parse(GlobalId); _startingLocation = _utilityNetwork.CreateElement(assetType, globalId); // Create a graphics overlay. GraphicsOverlay overlay = new GraphicsOverlay(); MyMapView.GraphicsOverlays.Add(overlay); // Display starting location. IEnumerable <ArcGISFeature> elementFeatures = await _utilityNetwork.GetFeaturesForElementsAsync(new List <UtilityElement> { _startingLocation }); MapPoint startingLocationGeometry = elementFeatures.FirstOrDefault().Geometry as MapPoint; Symbol symbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Cross, System.Drawing.Color.LimeGreen, 25d); Graphic graphic = new Graphic(startingLocationGeometry, symbol); overlay.Graphics.Add(graphic); // Set the starting viewpoint. await MyMapView.SetViewpointAsync(new Viewpoint(startingLocationGeometry, 3000)); // Build the choice list for categories populated with the `Name` property of each `UtilityCategory` in the `UtilityNetworkDefinition`. Categories.ItemsSource = _utilityNetwork.Definition.Categories; Categories.SelectedItem = _utilityNetwork.Definition.Categories.First(); // Enable the UI. FilterOptions.Visibility = Visibility.Visible; } catch (Exception ex) { await new MessageDialog(ex.Message, ex.GetType().Name).ShowAsync(); } finally { LoadingBar.Visibility = Visibility.Collapsed; } }
private async void OnTrace(object sender, RoutedEventArgs e) { try { // Get the selected trace type. UtilityTraceType traceType = (UtilityTraceType)TraceTypes.SelectedItem; // Update the UI. MainUI.IsEnabled = false; IsBusy.Visibility = Visibility.Visible; Status.Text = $"Running {traceType.ToString().ToLower()} trace..."; // Clear previous selection from the layers. MyMapView.Map.OperationalLayers.OfType <FeatureLayer>().ToList().ForEach(layer => layer.ClearSelection()); // Build trace parameters. UtilityTraceParameters parameters = new UtilityTraceParameters(traceType, _startingLocations); foreach (UtilityElement barrier in _barriers) { parameters.Barriers.Add(barrier); } // Set the trace configuration using the tier from the utility domain network. parameters.TraceConfiguration = _mediumVoltageTier.TraceConfiguration; // Get the trace result from the utility network. IEnumerable <UtilityTraceResult> traceResult = await _utilityNetwork.TraceAsync(parameters); UtilityElementTraceResult elementTraceResult = traceResult?.FirstOrDefault() as UtilityElementTraceResult; // Check if there are any elements in the result. if (elementTraceResult?.Elements?.Count > 0) { foreach (FeatureLayer layer in MyMapView.Map.OperationalLayers.OfType <FeatureLayer>()) { IEnumerable <UtilityElement> elements = elementTraceResult.Elements.Where(element => element.NetworkSource.Name == layer.FeatureTable.TableName); IEnumerable <Feature> features = await _utilityNetwork.GetFeaturesForElementsAsync(elements); layer.SelectFeatures(features); } } Status.Text = "Trace completed."; } catch (Exception ex) { Status.Text = "Trace failed..."; if (ex is ArcGISWebException && ex.Message == null) { MessageBox.Show("Trace failed.", ex.GetType().Name, MessageBoxButton.OK, MessageBoxImage.Error); } else { MessageBox.Show(ex.Message, ex.GetType().Name, MessageBoxButton.OK, MessageBoxImage.Error); } } finally { MainUI.IsEnabled = true; IsBusy.Visibility = Visibility.Hidden; } }
private async void Initialize() { try { // Disable the UI. _traceButton.Enabled = false; // Create and load the utility network. _utilityNetwork = await UtilityNetwork.CreateAsync(new Uri(FeatureServiceUrl)); // Create a map with layers in this utility network. _myMapView.Map = new Map(new Basemap(new Uri("https://www.arcgis.com/home/item.html?id=1970c1995b8f44749f4b9b6e81b5ba45"))); _myMapView.Map.OperationalLayers.Add(new FeatureLayer(new Uri($"{FeatureServiceUrl}/{LineLayerId}"))); _myMapView.Map.OperationalLayers.Add(new FeatureLayer(new Uri($"{FeatureServiceUrl}/{DeviceLayerId}"))); // Get a trace configuration from a tier. UtilityDomainNetwork domainNetwork = _utilityNetwork.Definition.GetDomainNetwork(DomainNetworkName) ?? throw new ArgumentException(DomainNetworkName); UtilityTier tier = domainNetwork.GetTier(TierName) ?? throw new ArgumentException(TierName); _configuration = tier.TraceConfiguration; // Create a trace filter. _configuration.Filter = new UtilityTraceFilter(); // Get a default starting location. UtilityNetworkSource networkSource = _utilityNetwork.Definition.GetNetworkSource(NetworkSourceName) ?? throw new ArgumentException(NetworkSourceName); UtilityAssetGroup assetGroup = networkSource.GetAssetGroup(AssetGroupName) ?? throw new ArgumentException(AssetGroupName); UtilityAssetType assetType = assetGroup.GetAssetType(AssetTypeName) ?? throw new ArgumentException(AssetTypeName); Guid globalId = Guid.Parse(GlobalId); _startingLocation = _utilityNetwork.CreateElement(assetType, globalId); // Create a graphics overlay. GraphicsOverlay overlay = new GraphicsOverlay(); _myMapView.GraphicsOverlays.Add(overlay); // Display starting location. IEnumerable <ArcGISFeature> elementFeatures = await _utilityNetwork.GetFeaturesForElementsAsync(new List <UtilityElement> { _startingLocation }); MapPoint startingLocationGeometry = elementFeatures.FirstOrDefault().Geometry as MapPoint; Symbol symbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Cross, System.Drawing.Color.LimeGreen, 25d); Graphic graphic = new Graphic(startingLocationGeometry, symbol); overlay.Graphics.Add(graphic); // Set the starting viewpoint. await _myMapView.SetViewpointAsync(new Viewpoint(startingLocationGeometry, 3000)); // Build the choice list for categories populated with the `Name` property of each `UtilityCategory` in the `UtilityNetworkDefinition`. _utilityNetwork.Definition.Categories.ToList().ForEach(cat => _categoryDictionary.Add(cat.Name, cat)); _categorySpinner.Adapter = new ArrayAdapter <string>(this, Android.Resource.Layout.SimpleSpinnerItem, _categoryDictionary.Keys.ToList()); _categorySpinner.SetSelection(0); // Enable the UI. _traceButton.Enabled = true; } catch (Exception ex) { new AlertDialog.Builder(this).SetMessage(ex.Message).SetTitle(ex.GetType().Name).Show(); } finally { _loadingBar.Visibility = Android.Views.ViewStates.Gone; } }
private async void Initialize() { // As of ArcGIS Enterprise 10.8.1, using utility network functionality requires a licensed user. The following login for the sample server is licensed to perform utility network operations. AuthenticationManager.Current.ChallengeHandler = new ChallengeHandler(async(info) => { try { // WARNING: Never hardcode login information in a production application. This is done solely for the sake of the sample. string sampleServer7User = "******"; string sampleServer7Pass = "******"; return(await AuthenticationManager.Current.GenerateCredentialAsync(info.ServiceUri, sampleServer7User, sampleServer7Pass)); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return(null); } }); try { // Disable the UI. FilterOptions.IsVisible = false; // Create and load the utility network. _utilityNetwork = await UtilityNetwork.CreateAsync(new Uri(FeatureServiceUrl)); // Create a map with layers in this utility network. MyMapView.Map = new Map(new Basemap(new Uri("https://www.arcgis.com/home/item.html?id=1970c1995b8f44749f4b9b6e81b5ba45"))); MyMapView.Map.OperationalLayers.Add(new FeatureLayer(new Uri($"{FeatureServiceUrl}/{LineLayerId}"))); MyMapView.Map.OperationalLayers.Add(new FeatureLayer(new Uri($"{FeatureServiceUrl}/{DeviceLayerId}"))); // Get a trace configuration from a tier. UtilityDomainNetwork domainNetwork = _utilityNetwork.Definition.GetDomainNetwork(DomainNetworkName) ?? throw new ArgumentException(DomainNetworkName); UtilityTier tier = domainNetwork.GetTier(TierName) ?? throw new ArgumentException(TierName); _configuration = tier.TraceConfiguration; // Create a trace filter. _configuration.Filter = new UtilityTraceFilter(); // Get a default starting location. UtilityNetworkSource networkSource = _utilityNetwork.Definition.GetNetworkSource(NetworkSourceName) ?? throw new ArgumentException(NetworkSourceName); UtilityAssetGroup assetGroup = networkSource.GetAssetGroup(AssetGroupName) ?? throw new ArgumentException(AssetGroupName); UtilityAssetType assetType = assetGroup.GetAssetType(AssetTypeName) ?? throw new ArgumentException(AssetTypeName); Guid globalId = Guid.Parse(GlobalId); _startingLocation = _utilityNetwork.CreateElement(assetType, globalId); // Create a graphics overlay. GraphicsOverlay overlay = new GraphicsOverlay(); MyMapView.GraphicsOverlays.Add(overlay); // Display starting location. IEnumerable <ArcGISFeature> elementFeatures = await _utilityNetwork.GetFeaturesForElementsAsync(new List <UtilityElement> { _startingLocation }); MapPoint startingLocationGeometry = elementFeatures.FirstOrDefault().Geometry as MapPoint; Symbol symbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Cross, System.Drawing.Color.LimeGreen, 25d); Graphic graphic = new Graphic(startingLocationGeometry, symbol); overlay.Graphics.Add(graphic); // Set the starting viewpoint. await MyMapView.SetViewpointAsync(new Viewpoint(startingLocationGeometry, 3000)); // Build the choice list for categories populated with the `Name` property of each `UtilityCategory` in the `UtilityNetworkDefinition`. CategoryPicker.ItemsSource = _utilityNetwork.Definition.Categories.ToList(); CategoryPicker.SelectedItem = _utilityNetwork.Definition.Categories.First(); // Enable the UI. FilterOptions.IsVisible = true; } catch (Exception ex) { await Application.Current.MainPage.DisplayAlert(ex.GetType().Name, ex.Message, "OK"); } finally { LoadingIndicator.IsVisible = false; } }