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)
サインインしたメンバーは投稿、更新のフォローなどができます。初めてですか?無料アカウントを登録してください。
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.