How can I use it?
Para utilizar o método de extensão vamos criar uma aplicação Silverlight simples que irá mostrar a informação de um layer oriundo de um serviço da ESRI.
Criamos então uma nova aplicação Silverlight 4 no Visual Studio 2010.
Adicione uma referência ao projeto que contém o método de extensão e também ao assembly ESRI.ArcGIS.Client.
Coloque o seguinte código no arquivo MainPage.xaml.
<UserControl x:Class="ArcGISServerAPIExtensionSample.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:esri="clr-namespace:ESRI.ArcGIS.Client;assembly=ESRI.ArcGIS.Client" mc:Ignorable="d"> <Grid x:Name="LayoutRoot"> <esri:Map x:Name="MainMap"> <esri:ArcGISDynamicMapServiceLayer ID="DynamicLayer" Url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer" Initialized="ArcGISDynamicMapServiceLayer_Initialized" /> </esri:Map> <Grid Background="Black" Margin="10" Width="450" VerticalAlignment="Top" HorizontalAlignment="Left"> <Grid.RowDefinitions> <RowDefinition Height="30" /> <RowDefinition Height="30" /> <RowDefinition Height="250" /> </Grid.RowDefinitions> <ComboBox x:Name="cmbLayers" HorizontalAlignment="Left" Width="180" Margin="2" Grid.Row="0" /> <Button x:Name="btnTeste" Width="180" Margin="2" HorizontalAlignment="Left" Content="Testar Método de Extensão" Grid.Row="1" Click="btnTeste_Click" /> <TextBox x:Name="txtResultado" Margin="2" Grid.Row="2" TextWrapping="Wrap" /> </Grid> </Grid> </UserControl>
O código XAML é bem simples e o objetivo é o usuário selecionar um layer no ComboBox e então clicar no Button, que realiza a chamada ao método de extensão.
No code-behind da página realize a inclusão dos namespaces abaixo:
using System.Text; using ArcGISServerAPIExtension; using ESRI.ArcGIS.Client;
Ainda no code-behind da página realize o data binding dos layers existentes no serviço DynamicLayer do mapa após o mesmo ser inicializado (evento Initialized).
private void ArcGISDynamicMapServiceLayer_Initialized(object sender, EventArgs e) { // recupera layer var dynamicLayer = sender as ArcGISDynamicMapServiceLayer; // data binding this.cmbLayers.SelectedValuePath = "ID"; this.cmbLayers.DisplayMemberPath = "Name"; this.cmbLayers.ItemsSource = dynamicLayer.Layers; }
Também faça a implementação do evento Click do Button para mostrar as informações do layer selecionado.
private void btnTeste_Click(object sender, RoutedEventArgs e) { // verifica se algum layer foi selecionado if (this.cmbLayers.SelectedValue == null) return; // referência ao layer dinâmico que está no mapa var dynamicLayer = this.MainMap.Layers["DynamicLayer"] as ArcGISDynamicMapServiceLayer; dynamicLayer.GetLayerDetails((int)this.cmbLayers.SelectedValue, (r) => { // verifica erro if (r.Error != null) { this.txtResultado.Text = r.Error.Message; return; } // recupera resultado do método var layerDetails = r.Result; // cria string que contém as informações do layer var stringBuilder = new StringBuilder(); // adiciona informações stringBuilder.AppendFormat("ID: {0}\n", layerDetails.ID); stringBuilder.AppendFormat("Name: {0}\n", layerDetails.Name); stringBuilder.AppendFormat("Description: {0}\n", layerDetails.Description); stringBuilder.AppendFormat("GeometryType: {0}\n", layerDetails.GeometryType); stringBuilder.AppendFormat("MinScale: {0}\n", layerDetails.MinScale); stringBuilder.AppendFormat("MaxScale: {0}\n", layerDetails.MaxScale); // adiciona campos (fields) stringBuilder.AppendLine("-----------------------"); stringBuilder.AppendLine("Fields"); stringBuilder.AppendLine("-----------------------"); foreach (var field in layerDetails.Fields) stringBuilder.AppendLine(field.Name); this.txtResultado.Text = stringBuilder.ToString(); } ); }
Esse método realiza o tratamento do método callback por meio de uma expressão lambda ( (r) =>) e mostra algumas das informações recuperadas do serviço.
Done !
O código-fonte do exemplo e do método de extensão você encontra aqui.
Espero que tenham gostado.
Outro artigo bem legal da serie.
ResponderExcluirAri, me passe seu contato. Sou gerente de uma equipe de .NET e utilizamos as APIs da ESRI.
No meu site tem um form de contato.
http://ctrlclabs.blogspot.com/
Nosso projeto: http://www.informs.conder.ba.gov.br/
Abraços!