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(); } }