Dave,Sorry it took me so long! I just tried to plug it in my code: This will work for sure: switch (featureSet.GeometryType.ToString()) // switch (feature.Attributes["Shape"].ToString()) { case "Polygon": feature.Symbol = LayoutRoot.Resources["ResultsFillSymbol"] as FillSymbol; break; case "Polyline": feature.Symbol = LayoutRoot.Resources["DefaultLineSymbol"] as SimpleLineSymbol; break; case "Point": feature.Symbol = LayoutRoot.Resources["ResultsMarkerSymbol"] as SimpleMarkerSymbol; break; } graphicsLayer.Graphics.Insert(0, feature); J. Lennon
switch (featureSet.GeometryType.ToString()) // switch (feature.Attributes["Shape"].ToString()) { case "Polygon": feature.Symbol = LayoutRoot.Resources["ResultsFillSymbol"] as FillSymbol; break; case "Polyline": feature.Symbol = LayoutRoot.Resources["DefaultLineSymbol"] as SimpleLineSymbol; break; case "Point": feature.Symbol = LayoutRoot.Resources["ResultsMarkerSymbol"] as SimpleMarkerSymbol; break; } graphicsLayer.Graphics.Insert(0, feature);
// switch (feature.Attributes["Shape"].ToString()) switch (feature.Geometry.ToString())
Dave,What about writing a switch statement....something like: private void QueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args) { FeatureSet featureSet = args.FeatureSet; if (featureSet == null || featureSet.Features.Count < 1) { MessageBox.Show("No features retured from query"); return; } GraphicsLayer graphicsLayer = Map.Layers["MySelectionGraphicsLayer"] as GraphicsLayer; if (featureSet != null && featureSet.Features.Count > 0) { foreach (Graphic feature in featureSet.Features) { switch (feature.Attributes["Shape"].ToString()) { case "Polygon": feature.Symbol = LayoutRoot.Resources["DefaultFillSymbol"] as FillSymbol; break; case "Polyline": feature.Symbol = LayoutRoot.Resources["DefaultLineSymbol"] as SimpleMarkerSymbol; break; case "Point": feature.Symbol = LayoutRoot.Resources["Default.MarkerSymbol"] as SimpleLineSymbol; break; } graphicsLayer.Graphics.Insert(0, feature); } ResultsDisplay.Visibility = Visibility.Visible; } MyDrawSurface.IsEnabled = false; } I'm not sure if that will work. I just copied Jen's code from above and add the switch there might be a few typos.J.
private void QueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args) { FeatureSet featureSet = args.FeatureSet; if (featureSet == null || featureSet.Features.Count < 1) { MessageBox.Show("No features retured from query"); return; } GraphicsLayer graphicsLayer = Map.Layers["MySelectionGraphicsLayer"] as GraphicsLayer; if (featureSet != null && featureSet.Features.Count > 0) { foreach (Graphic feature in featureSet.Features) { switch (feature.Attributes["Shape"].ToString()) { case "Polygon": feature.Symbol = LayoutRoot.Resources["DefaultFillSymbol"] as FillSymbol; break; case "Polyline": feature.Symbol = LayoutRoot.Resources["DefaultLineSymbol"] as SimpleMarkerSymbol; break; case "Point": feature.Symbol = LayoutRoot.Resources["Default.MarkerSymbol"] as SimpleLineSymbol; break; } graphicsLayer.Graphics.Insert(0, feature); } ResultsDisplay.Visibility = Visibility.Visible; } MyDrawSurface.IsEnabled = false; }
private void QueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args) { FeatureSet featureSet = args.FeatureSet; if (featureSet == null || featureSet.Features.Count < 1) { MessageBox.Show("No features retured from query"); return; } GraphicsLayer graphicsLayer = MyMap.Layers["MySelectionGraphicsLayer"] as GraphicsLayer; if (featureSet != null && featureSet.Features.Count > 0) ResultsDisplay.Visibility = Visibility.Visible; { foreach (Graphic feature in featureSet.Features) { feature.Symbol = LayoutRoot.Resources["ResultsFillSymbol"] as FillSymbol; feature.Symbol = LayoutRoot.Resources["DefaultLineSymbol"] as SimpleLineSymbol; graphicsLayer.Graphics.Insert(0, feature); } ResultsDisplay.Visibility = Visibility.Visible; } MyDrawSurface.IsEnabled = false; }
public partial class MainPage : UserControl { private Draw MyDrawSurface; ObservableCollection<FeatureLayer> layers; public MainPage() { InitializeComponent(); string baseUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer"; for (int i = 0; i <= 5; i++) { FeatureLayer featureLayer = new FeatureLayer() { Url = string.Format("{0}/{1}", baseUrl, i) }; featureLayer.Initialize(); layers.Add(featureLayer); } Layers.ItemsSource = layers; Layers.SelectedIndex = 0; MyDrawSurface = new Draw(MyMap) { LineSymbol = LayoutRoot.Resources["DefaultLineSymbol"] as SimpleLineSymbol, FillSymbol = LayoutRoot.Resources["DefaultFillSymbol"] as FillSymbol }; MyDrawSurface.DrawComplete += MyDrawSurface_DrawComplete; } private void esriTools_ToolbarItemClicked(object sender, ESRI.ArcGIS.Client.Toolkit.SelectedToolbarItemArgs e) { switch (e.Index) { case 0: // Point MyDrawSurface.DrawMode = DrawMode.Point; break; case 1: // Polyline MyDrawSurface.DrawMode = DrawMode.Polyline; break; case 2: // Polygon MyDrawSurface.DrawMode = DrawMode.Polygon; break; case 3: // Rectangle MyDrawSurface.DrawMode = DrawMode.Rectangle; break; default: // Clear MyDrawSurface.DrawMode = DrawMode.None; GraphicsLayer selectionGraphicslayer = MyMap.Layers["MySelectionGraphicsLayer"] as GraphicsLayer; selectionGraphicslayer.ClearGraphics(); QueryDetailsDataGrid.ItemsSource = null; ResultsDisplay.Visibility = Visibility.Collapsed; break; } MyDrawSurface.IsEnabled = (MyDrawSurface.DrawMode != DrawMode.None); StatusTextBlock.Text = e.Item.Text; } private void MyDrawSurface_DrawComplete(object sender, ESRI.ArcGIS.Client.DrawEventArgs args) { GraphicsLayer selectionGraphicslayer = MyMap.Layers["MySelectionGraphicsLayer"] as GraphicsLayer; selectionGraphicslayer.ClearGraphics(); QueryTask queryTask = new QueryTask((Layers.SelectedItem as FeatureLayer).Url); //... more code here queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted; queryTask.Failed += QueryTask_Failed; // Bind data grid to query results Binding resultFeaturesBinding = new Binding("LastResult.Features"); resultFeaturesBinding.Source = queryTask; QueryDetailsDataGrid.SetBinding(DataGrid.ItemsSourceProperty, resultFeaturesBinding); Query query = new ESRI.ArcGIS.Client.Tasks.Query(); // Specify fields to return from query //query.OutFields.AddRange(new string[] { "STATE_NAME", "SUB_REGION", "STATE_FIPS", "STATE_ABBR", "POP2000", "POP2007" }); // query.OutFields.Add("*"); query.Geometry = args.Geometry; // Return geometry with result features query.ReturnGeometry = true; queryTask.ExecuteAsync(query); } private void QueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args) { FeatureSet featureSet = args.FeatureSet; if (featureSet == null || featureSet.Features.Count < 1) { MessageBox.Show("No features retured from query"); return; } GraphicsLayer graphicsLayer = MyMap.Layers["MySelectionGraphicsLayer"] as GraphicsLayer; if (featureSet != null && featureSet.Features.Count > 0) { foreach (Graphic feature in featureSet.Features) { feature.Symbol = LayoutRoot.Resources["ResultsFillSymbol"] as FillSymbol; graphicsLayer.Graphics.Insert(0, feature); } ResultsDisplay.Visibility = Visibility.Visible; } MyDrawSurface.IsEnabled = false; } private void QueryTask_Failed(object sender, TaskFailedEventArgs args) { MessageBox.Show("Query failed: " + args.Error); } private void GraphicsLayer_MouseEnter(object sender, GraphicMouseEventArgs args) { QueryDetailsDataGrid.Focus(); QueryDetailsDataGrid.SelectedItem = args.Graphic; QueryDetailsDataGrid.CurrentColumn = QueryDetailsDataGrid.Columns[0]; QueryDetailsDataGrid.ScrollIntoView(QueryDetailsDataGrid.SelectedItem, QueryDetailsDataGrid.Columns[0]); } private void GraphicsLayer_MouseLeave(object sender, GraphicMouseEventArgs args) { QueryDetailsDataGrid.Focus(); QueryDetailsDataGrid.SelectedItem = null; } private void QueryDetailsDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { foreach (Graphic g in e.AddedItems) g.Select(); foreach (Graphic g in e.RemovedItems) g.UnSelect(); } private void QueryDetailsDataGrid_LoadingRow(object sender, DataGridRowEventArgs e) { e.Row.MouseEnter += Row_MouseEnter; e.Row.MouseLeave += Row_MouseLeave; } void Row_MouseEnter(object sender, MouseEventArgs e) { (((System.Windows.FrameworkElement)(sender)).DataContext as Graphic).Select(); } void Row_MouseLeave(object sender, MouseEventArgs e) { DataGridRow row = sender as DataGridRow; Graphic g = ((System.Windows.FrameworkElement)(sender)).DataContext as Graphic; if (!QueryDetailsDataGrid.SelectedItems.Contains(g)) g.UnSelect(); } } }
QueryTask queryTask = new QueryTask((Layers.SelectedItem as FeatureLayer).Url); //... more code here query.OutFields.Add("*");
Oh I'm sorry I missed to include that - layers in my sample is of type ObservableCollection<FeatureLayer>.
<esri:FeatureDataGrid Grid.Row="1" x:Name="QueryDetailsDataGrid" Height="170" Map="{Binding ElementName=MyMap}" GraphicsLayer="{Binding ElementName=MyMap, Path=Layers[MySelectionGraphicsLayer]}" />
<ComboBox x:Name="Layers" > <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding LayerInfo.Name}"/> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox>
string baseUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer"; for (int i = 0; i <= 5; i++) { FeatureLayer featureLayer = new FeatureLayer() { Url = string.Format("{0}/{1}", baseUrl, i)}; featureLayer.Initialize(); layers.Add(featureLayer); } Layers.ItemsSource = layers; Layers.SelectedIndex = 0;
private void MyDrawSurface_DrawComplete(object sender, ESRI.ArcGIS.Client.DrawEventArgs args) { GraphicsLayer selectionGraphicslayer = Map.Layers["MySelectionGraphicsLayer"] as GraphicsLayer; selectionGraphicslayer.ClearGraphics(); // Bind data grid to query results Binding resultFeaturesBinding = new Binding("LastResult.Features"); resultFeaturesBinding.Source = _queryTask; QueryDetailsDataGrid.SetBinding(DataGrid.ItemsSourceProperty, resultFeaturesBinding); Query query = new ESRI.ArcGIS.Client.Tasks.Query(); //Jay add for if else drop list. if (LayerListDropDown.SelectedIndex == 0) { Field1 = "BVUNIQUEID"; Field2 = "ACRES"; Field3 = "CREZ_NAME"; Field4 = "SOLARTH_MW"; query.OutFields.AddRange(new string[] { Field1, Field2, Field3, Field4 }); } else if (LayerListDropDown.SelectedIndex == 1) {
<slData:DataGrid.Columns> <!-- This dies --> <slData:DataGridTextColumn Binding= "{Binding Attributes[Field1]}" Header= Field1/> <!-- These still work --> <slData:DataGridTextColumn Binding="{Binding Attributes[ACRES]}" Header="CREZ NAME"/> <slData:DataGridTextColumn Binding="{Binding Attributes[SOLARTH_MW]}" Header="SOLARTH MW"/> <slData:DataGridTextColumn Binding="{Binding Attributes[ACRES]}" Header="ACRES"/> </slData:DataGrid.Columns>
<!-- Query Results --> <slData:DataGrid x:Name="QueryDetailsDataGrid" AutoGenerateColumns="False" HeadersVisibility="Column" Background="White" IsReadOnly="True" HorizontalScrollBarVisibility="Hidden" RowStyle="{StaticResource MyCustomRow}" CanUserSortColumns="True" SelectionChanged="QueryDetailsDataGrid_SelectionChanged" LoadingRow="QueryDetailsDataGrid_LoadingRow"> <slData:DataGrid.Columns> <slData:DataGridTextColumn Binding="{Binding Attributes[BVUNIQUEID]}" Header="BV UNIQUE ID"/> <slData:DataGridTextColumn Binding="{Binding Attributes[CREZ_NAME]}" Header="CREZ NAME"/> <slData:DataGridTextColumn Binding="{Binding Attributes[SOLARTH_MW]}" Header="SOLARTH MW"/> <slData:DataGridTextColumn Binding="{Binding Attributes[ACRES]}" Header="ACRES"/> </slData:DataGrid.Columns> </slData:DataGrid> </ScrollViewer> </Grid> </userControls:CollapsiblePanel> <!-- End Query Results -->
<!--Jays DropDown List / Combo Box for Spatial Selection --> <ComboBox x:Name="LayerListDropDown" Width="150" Height="30" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,5,0,5" SelectionChanged="DropDown_ItemSelected"> <ComboBoxItem Content="layer1" /> <ComboBoxItem Content="layer2" /> <ComboBoxItem Content="layer3" /> </ComboBox> <!--Jays DropDown List / Combo Box for Spatial Selection -->
#region LayerListDropDown Code //layerlist dropdown code private void DropDown_ItemSelected(object sender, EventArgs e) { if (LayerListDropDown.SelectedIndex == 0) { UrlServiceId = "http://dgpdch01/ArcGIS/rest/services/testD2/MapServer/14"; } else if (LayerListDropDown.SelectedIndex == 1) { UrlServiceId = "http://dgpdch01/ArcGIS/rest/services/testD2/MapServer/18"; } else { UrlServiceId = "http://dgpdch01/ArcGIS/rest/services/testD2/MapServer/19"; } _queryTask = new QueryTask(UrlServiceId); _queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted; _queryTask.Failed += QueryTask_Failed; } #endregion
//Jay add for if else drop list. if (LayerListDropDown.SelectedIndex == 0) { query.OutFields.AddRange(new string[] { "BVUNIQUEID", "ACRES", "CREZ_NAME", "SOLARTH_MW" }); } else if (LayerListDropDown.SelectedIndex == 1) { query.OutFields.AddRange(new string[] { "PROJECTTYP", "CREZ_BVID", "CREZ_NAME", "MW", "CALCULATED"}); } else { query.OutFields.AddRange(new string[] { "PROJECT_ID", "ASSOC_CREZ", "ACRES", "CREZ_BVID", "GISCALC" }); }
<slData:DataGrid.Columns> <slData:DataGridTextColumn Binding="{Binding Attributes[BVUNIQUEID]}" Header="BV UNIQUE ID"/> <slData:DataGridTextColumn Binding="{Binding Attributes[CREZ_NAME]}" Header="CREZ NAME"/> <slData:DataGridTextColumn Binding="{Binding Attributes[SOLARTH_MW]}" Header="SOLARTH MW"/> <slData:DataGridTextColumn Binding="{Binding Attributes[ACRES]}" Header="ACRES"/> </slData:DataGrid.Columns>
answering my own question:within the xaml for my ArcGISDynamicMapServiceLayer, i provide a call to a method for Initializedin the code behind: var dynamicService = sender as ArcGISDynamicMapServiceLayer;get the layerinfos: foreach (LayerInfo fl in dynamicService.Layers)
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registriere ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.