Olá pessoal, tudo bom?
Nesse post demonstro como podemos desenvolver uma APP para Windows Phone capaz de exibir sua posição geográfica atual em um mapa e ainda permitir que o usuário tenha à disposição um controle para aumentar ou diminuir o zoom de visualização.
Bem, tendo criado uma aplicação Windows Phone no Visual Studio, adicione uma nova página e nela faça referência ao XML namespace Microsoft.Phone.Maps.Controls.
xmlns:maps="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps"
Na sequencia, adicione um elemento Map e um Slider para composição da interface de teste.
... <!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <maps:Map x:Name="mapa" ZoomLevel="15" CartographicMode="Aerial" ColorMode="Light" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="587" Width="436"/> <Slider x:Name="zoom" HorizontalAlignment="Left" Margin="392,0,0,0" VerticalAlignment="Top" Width="76" Maximum="19" Minimum="1" Orientation="Vertical" Grid.Row="1" Height="322" ValueChanged="zoom_ValueChanged" Value="15"/> </Grid> ...
A imagem abaixo lhe dá uma ideia de como o layout está ficando.
Ajustando as Capabilities da APP
Para que seja possível usar os recursos de mapa e geolocalização é necessário que você abra o arquivo WMAppManifest.xml que fica junto à pasta Properties da aplicação e marque as capabilities ID_CAP_LOCATION e ID_CAP_MAP.
Codificação em C#
Agora que já cuidamos do layout em XAML e das Capabilities da APP verifiquemos a implementação do código C#.
... //Construtor public Mapa() { InitializeComponent(); //Após o carregamento da página, o método para //leitura da posição geográfica atual e exibição //do mapa é acionado. this.Loaded += Mapa_Loaded; } private async void Mapa_Loaded(object sender, RoutedEventArgs e) { //Objeto que será usado para obter a posição geográfica atual Geolocator geo = new Geolocator(); if (geo.LocationStatus != PositionStatus.Disabled) { //Obtendo a posição geográfica Geoposition pos = await geo.GetGeopositionAsync(); //Centralizando o mapa na coordenada geográfica obtida mapa.Center = pos.Coordinate.ToGeoCoordinate(); } } //Método que trata o aumento ou diminuição do zoom private void zoom_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { try { //Ajustando o zoom... mapa.ZoomLevel = e.NewValue; } catch { } }
Ao executar a aplicação teremos o seguinte resultado:
Fica a dica!
Grande abraço,
Eduardo Henrique Rizo
Posts Relacionados:
[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]
Pingback: Free: Curso Windows Phone – Vários tópicos | Blog do Eduardo H. Rizo