In questo articolo vedremo come cambiare a run time, tramite il linguaggio di programmazione Visual Baisc Net e C#, l’aspetto grafico della nostra mappa.
La tecnica può tornare utile in quei contesti in cui si vuole far notare all’utente vari scenari o dare indicazioni su più aspetti statistici.
Si crea un nuovo progetto Silverlight versione 5 selezionando il linguaggio di proprio interesse.
Dopo aver aggiunto al progetto un controllo mappa, inserite tre controlli di tipo “RadionButton” in questo modo al “Click” sul controllo verrà impostato una determinata mappa.
Impostate un controllo con la scritta “Strada” il quale avrà il compito di impostare la mappa di tipo “Stradale”, il controllo che segue con la proprietà “Content” impostata su “Topomastica” in cui visualizzerà la mappa secondo lo stile di default, ed infine nell’ultimo controllo, impostare la proprietà “Content” con il valore “Geologica”.
La finestra dovrà essere uguale a quella mostrata in figura 1.
Figura 1 – la disposizione dei controlli.
A questo punto, dobbiamo impostare per ogni controllo, la proprietà “Tag” in cui verrà inserito il collegamento web che permette di visualizzare la mappa secondo l’opzione selezionata.
Per il primo controllo, quello con la proprietà “Content” indicante “Strada”, impostare la proprietà “Tag” sul valore “http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer
” mentre per il controllo quello in cui la proprietà content è stato impostato su “Topomastica” valorizzare la proprietà “Tag” con il valore “http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer
” infine per il controllo la cui proprietà “Content” è stata impostata con il valore “Geologica” impostare la proprietà “Tag” con il valore “http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer
” a questo punto dobbiamo solo gestire l’evento click.
Stesura del codice
Nella parte XAML o nella finestra proprietà impostiamo l’evento click con un gestore di evento.
Quando scriviamo la dicitura “Click” l’ambiente di sviluppo ci fornisce indicazioni, (figura 2) a questo punto senza dare al programma la possibilità di scrivere l’evento per noi, scriviamo il seguente testo “rdb_Click
“ nelle virgolette in modo da creare un nostro evento, una volta impostato, ci dobbiamo ricordare di fare tasto destro con il mouse e dal menu che viene aperto selezionare la voce “Passa al gestore evento” o nella finestra delle proprietà confermare con un doppio click tale evento.
Figura 2 – l’auto completamento dell’ambiente di sviluppo
A questo punto, nel file “XAML” o nella finestra delle proprietà, selezioniamo tale evento che sarà suggerito per gli altri pulsanti (figura 3).
Figura 3 – L’evento che viene suggerito per gli altri controlli.
Dopo aver impostato a tutti e tre i controlli radion button dobbiamo scrivere il codice che imposta la mappa.
Qui di seguito si riporta il codice completo “XAML”.
<Grid x:Name="LayoutRoot" Background="White">
<esri:Map Background="White" HorizontalAlignment="Left" Margin="10,10,0,0" Name="map1" VerticalAlignment="Top" WrapAround="True" Height="290" Width="378">
<esri:Map.Layers>
<esri:LayerCollection>
<esri:ArcGISTiledMapServiceLayer ID="LayoutMap" Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />
</esri:LayerCollection>
</esri:Map.Layers>
</esri:Map>
<RadioButton Content="Strada" Height="16" HorizontalAlignment="Left" Margin="12,25,0,0" Name="rdbStrada" VerticalAlignment="Top" Width="111" Click="rdb_Click" Tag="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />
<RadioButton Content="Topomastica" Height="16" HorizontalAlignment="Left" Margin="138,25,0,0" Name="rdbTopomastica" VerticalAlignment="Top" Click="rdb_Click" Width="97" Tag="http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer" />
<RadioButton Content="Geologica" Height="16" HorizontalAlignment="Left" Margin="241,25,0,0" Name="rdbGeografica" VerticalAlignment="Top" Width="116" Click="rdb_Click" Tag="http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer" />
</Grid>
Passando in visualizzazione codice dobbiamo scrivere lo spazio dei nomi per la gestione delle varie classi
VB.Net
Imports ESRI.ArcGIS.Client
C#
using ESRI.ArcGIS.Client;
Ora scriviamo il codice per il linguaggio VB.Net e C#, ricordiamo che per il tag “ArcGISTiledMapServiceLayer” dobbiamo impostare un "ID", per poi gestirlo nella parte codice.
VB.Net
Private Sub rdb_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
Dim arcgisLayer As ArcGISTiledMapServiceLayer = TryCast(map1.Layers("LayoutMap"), ArcGISTiledMapServiceLayer)
arcgisLayer.Url = TryCast((CType(sender, RadioButton)).Tag, String)
End Sub
C#
private void rdb_Click(object sender, RoutedEventArgs e)
{
ArcGISTiledMapServiceLayer arcgisLayer = map1.Layers["LayoutMap"] as ArcGISTiledMapServiceLayer;
arcgisLayer.Url = ((RadioButton)sender).Tag as string;
}
Nell’evento click si crea un oggetto di tipo “ArcGISTiledMapServiceLayer” il quale ottiene la classe della mappa per la gestione dell’aspetto, a quel punto si imposta la relativa proprietà “Url” con il valore presente nella proprietà “Tag” del controllo “RadioButton” su cui si è fatto click, la quale contiene il sito web per le mappe.
Conclusioni
Abbiamo visto come poter cambiare a run time l’aspetto grafico della nostra mappa, una funzionalità molto utile che può servire in tutti quei scenari dove sono previsti la gestione di più categorie.
Le potenzialità offerte dai controlli Esri sono moltissime, come anche la relativa flessibilità nell'utilizzo con i vari linguaggi di programmazione e contenti.