Mostrar ubicación actual en el mapa de Bing en windows phone

Estándar

Hola a todos. bueno desde hoy empiezo hacer una serie de tutoriales para WP y Windows 8.

Hoy tocaremos lo que es GPS del móvil,creo que mas de una persona a buscado como hacer que su app busque en que parte estas. En este tutorial vamos hacer eso.

entonces empecemos, primero vamos al portal de Bing e iniciamos sesión con nuestra cuenta Windows Live ID luefgo estando ya dentro de la sesión al lado izquierdo aparece que dice  Create or view keys hacemos click y creamos nuestra key para los mapas de Bing. (Esto es para que Bing nos deje ocupar sus mapas ya que sin la key nos aparecerá un mensaje que las credenciales son invalidas)

ya teniendo la key desde el portal de bing podemos pasar a visual studio.

Creamos nuestro nuevo proyecto para Windows Phone y agregamos el map que aparece en la barra de controles quedándonos asi nuestro proyecto

dentro de esta en el explorador de soluciones en MainPage.xaml buscas el el map donde se encuentra declarado y dentro del codigo escribes CredentialsProvider=”aqui va la clave” y ya tenemos nuestro mapa con las credenciales necesarias para hacerlo correr. (en el demo se encuentra con mi key cambienla por la de ustedes porque no le funcionara con mi key.

luego de esto nos vamos a MainPage.xaml.cs  y declaramos GeocoodinateWatcher que le vamos a dar como nombre ubicacion. teniendo esto en el constructor vamos a crear un nuevo objeto que contenga los eventos PositionChanged y   StatusChanged, también hay que agregar el nivel de sensibilidad que tendrá nuestro servicio de localización ya que esto determina cada cuanto se lanza el evento positionChanged. entonces para poder realizar esto vamos a usar la propiedad MovementThreshold. nunca esta demás decir que tenemos que invocar el método start para iniciar la localización. como resultado nuestro code nos queda así:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.Device.Location;

namespace demobingmaps
{
public partial class MainPage : PhoneApplicationPage
{
private GeoCoordinateWatcher ubicacion;

// Constructor
public MainPage()
{
InitializeComponent();

ubicacion = new GeoCoordinateWatcher();
ubicacion.PositionChanged += new EventHandler<geopositionchangedeventargs>(ubicacion_lugar);
ubicacion.StatusChanged += new EventHandler(ubicacion_estado);
ubicacion.MovementThreshold = 20;
ubicacion.Start();
}
void ubicacion_estado(object sender, GeoPositionStatusChangedEventArgs e)
{

}
void ubicacion_lugar(object sender, GeoPositionChangedEventArgs e)
{

}
}
}

como se dieron cuenta nuestras 2 void ubicacion_estado y ubicacion_lugar no tiene ningún código que ejecute, entonces vamos a obtener la posición actual con el evento PositionChanged. para que la posición actual cambie. entonces vamos a declarar un pusphin  justo al lado de ubicación:

GeoCoordinateWatcher ubicacion;
Pushpin mipos;

en el  void ubicacion_lugar  vamos a implementar el pusphin que no haya sido instanciado antes para moverlo y luego volver instanciar para moverlo de posicion. tenemos que tener en cuenta que si cambiaron el nombre del mapa vamos a implementar el codigo con su nombre cambiado  o si lo dejaron por defecto es map1. :

void ubicacion_lugar(object sender, GeoPositionChangedEventArgs e)
{
if (mipos != null)
map1.Children.Remove(mipos);

mipos = new Pushpin();
mipos.Location = e.Position.Location;
mipos.Content = “Aqui estoy yo”;
map1.Children.Add(mipos);

map1.SetView(mipos.Location, 17);
}

ahora teniendo esto vamos a implementar el método StatusCanged esto sirve bastante para el usuario final de la aplicacion ya que muestra el estado del gps. para esto hay un codigo sample en MSDN lo cual hice un copy paste😀 jeje entonces agregaremos 2 botones y un textblock que llamaremos : startLocationButton,stopLocationButton y statusTextBlock:

void ubicacion_estado(object sender, GeoPositionStatusChangedEventArgs e)
{
switch (e.Status)
{
case GeoPositionStatus.Disabled:
// The Location Service is disabled or unsupported.
// Check to see whether the user has disabled the Location Service.
if (ubicacion.Permission == GeoPositionPermission.Denied)
{
// The user has disabled the Location Service on their device.
statusTextBlock.Text = “you have this application access to location.”;
}
else
{
statusTextBlock.Text = “ubicación no está funcionando en este dispositivo”;
}
break;

case GeoPositionStatus.Initializing:
// The Location Service is initializing.
// Disable the Start Location button.
startLocationButton.IsEnabled = false;
break;

case GeoPositionStatus.NoData:
// The Location Service is working, but it cannot get location data.
// Alert the user and enable the Stop Location button.
statusTextBlock.Text = “datos de localización no está disponible.”;
stopLocationButton.IsEnabled = true;
break;

case GeoPositionStatus.Ready:
// The Location Service is working and is receiving location data.
// Show the current position and enable the Stop Location button.
statusTextBlock.Text = “los datos de ubicación está disponible.”;
stopLocationButton.IsEnabled = true;
break;
}
}

ya teniendo esto, solo falta implementar los 2 botones
Boton Iniciar

private void startLocationButton_Click(object sender, RoutedEventArgs e)
{
startLocationButton.IsEnabled = false;
stopLocationButton.IsEnabled = true;
ubicacion.Start();
}

Boton Parar

private void stopLocationButton_Click(object sender, RoutedEventArgs e)
{
startLocationButton.IsEnabled = true;
stopLocationButton.IsEnabled = false;
ubicacion.Stop();

        }

Y listo ya tenemos nuestra aplicacion terminada!! dejo el codigo de ejemplo para que revisen la demo nos vemos hasta la proxima!🙂

3 comentarios en “Mostrar ubicación actual en el mapa de Bing en windows phone

  1. Una pregunta, si tengo un evento que haga un conteo de tiempo desde 0 hasta n segundos, como puedo mandar a llamar ese evento en el codigo de obtencion de ubicacion? y la otra pregunta es si este codigo ya implementado en un dispositivo, obtiene la verdadera ubicacion del telefono?, porque en el emulador solo obtiene la ubicacion de la corporacion de microsoft

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s