modulo19 localización

14

Upload: eduardo

Post on 24-May-2015

2.134 views

Category:

Documents


5 download

DESCRIPTION

Vamos a ver cómo crear aplicaciones que utilicen los servicios de localización de Bing y la API dedicada a geo localizar nuestro dispositivo, a través de la cual crearemos una aplicación que pueda localizarnos en un mapa.Además trabajaremos con el emulador de localización de las herramientas de Windows Phone.

TRANSCRIPT

Page 1: Modulo19 Localización
Page 2: Modulo19 Localización

Servicio de localización

El servicio de localización en WP7 obtiene los datos

de posicionamiento de:

GPS

WIFI

Radio GSM

El sistema busca el equilibrio entre consumo de

batería y rendimiento, en función de las necesidades

de la aplicación

Interfaz de código orientado a eventos administrados

Page 3: Modulo19 Localización

Arquitectura

Tres capas

Hardware (GPS, WIFI, Radio GSM)

Distintos niveles de precisión y consumo energético

No accesible para el desarrollador

Código nativo

Se comunica directamente con la capa Hardware

Decide qué fuentes utilizar basándose en disponibilidad de datos y los

requisitos de rendimiento de la aplicación

También se comunica a través de Internet con un servicio web de Microsoft

Interfaz manejada

DLL incluida con las Windows Phone Developer Tools (System.Device.dll)

Espacio de nombres System.Device.Location

Permite iniciar y parar el servicio, configurar el nivel de precisión y recibir

los datos de la capa nativa*

Page 4: Modulo19 Localización

Buenas prácticas

Balance entre la exactitud de los datos de localización y el consumo de batería

Relación inversa entre exactitud y consumo de batería

Hardware que proporciona datos menos precisos consume menos (WiFi y radiotelefonía)

GPS proporciona mayor exactitud a costa de mayor consumo

Reglas básicas Utilizar menor precisión siempre que sea posible

Activar el servicio de localización sólo cuando sea necesario y detenerlo después

Page 5: Modulo19 Localización

Acceso al servicio de localización

GeoCoordinateWatcher es la clase principal de System.Device.Location

Métodos Start() inicia la adquisición de datos del servicio de

localización (asíncrono)

TryStart() intenta iniciar el servicio durante un intervalo de tiempo determinado (síncrono)

Stop() detiene la adquisición de datos

Propiedades MovementThreshold umbral del cambio de posición que

debe tener lugar para que se lance el evento PositionChanged (valor recomendado: 20 metros)

Eventos StatusChanged cambio de estado

PositionChanged cambio de posición

Page 6: Modulo19 Localización

Servicio de localización

Estados del servicio de localización

Recogidos en la enumeración GeoPositionStatus

Disabled servicio deshabilitado por el

usuario o no soportado por el dispositivo

Initializing el servicio se está inicializando

NoData servicio en funcionamiento pero no

recibe datos de localización

Ready servicio en ejecución y recibiendo

datos

Page 7: Modulo19 Localización

Servicio de localización

Nivel de exactitud

El servicio de localización utiliza varias fuentes para obtener los datos

Es posible que en determinados momentos algunas de las fuentes no estén disponibles

La capa de código nativo seleccionará la fuente más adecuada en función de los datos disponibles

Nuestra aplicación únicamente deberá seleccionar el nivel de precisión de los datos de localización

GeoPositionAccuracy.High

GeoPositionAccuracy.Low

GeocordinateWatcher watcher = new GeocordinateWatcher(GeoPositionAccuracy.Low);

Page 8: Modulo19 Localización

Utilizar el servicio de localización

1. Agregar referencia:

System.Device.dll

2. Directiva Using:

using System.Device.Location

3. Añadir objeto GeoCoordinateWatcher

public partial class MainPage : PhoneApplicationPage

{

GeoCoordinateWatcher watcher;

}

Declarar GeoCoordinateWatcher de forma

global para que esté en memoria todo el

tiempo que se muestre la página

Page 9: Modulo19 Localización

Aplicación con localización opcional

private void btnIniciar_Click(object sender, RoutedEventArgs e)

{

if (watcher == null)

{

watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);

watcher.MovementThreshold = 20;

watcher.StatusChanged += new

EventHandler<GeoPositionStatusChangedEventArgs>(watcher_Statu

sChanged);

watcher.PositionChanged += new

EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watc

her_PositionChanged);

}

watcher.Start();

}

void watcher_PositionChanged(object sender,

GeoPositionChangedEventArgs<GeoCoordinate> e)

{

txtLatitud.Text =

e.Position.Location.Latitude.ToString("0.000");

txtLongitud.Text =

e.Position.Location.Longitude.ToString("0.000");

}

private void btnPararServicioLocalizacion_Click(object sender,

RoutedEventArgs e)

{

watcher.Stop();

}

void watcher_StatusChanged(object sender,

GeoPositionStatusChangedEventArgs e)

{

switch (e.Status)

{

case GeoPositionStatus.Disabled:

if (watcher.Permission == GeoPositionPermission.Denied)

txtEstado.Text = “Debe habilitar la localización”

else

txtEstado.Text = “Servicio no disponible.";

break;

case GeoPositionStatus.Initializing:

btnIniciar.IsEnabled = false;

break;

case GeoPositionStatus.NoData:

txtEstado.Text = “Sin señal";

btnPararServicioLocalizacion.IsEnabled = true;

break;

case GeoPositionStatus.Ready:

txtEstado.Text = “Localización preparada";

btnPararServicioLocalizacion.IsEnabled = true;

break;

}

}

Page 10: Modulo19 Localización

Control BingMaps

1. Crear una cuenta de desarrollador https://www.bingmapsportal.com/

2. Creamos una nueva Key Nombre aplicación, URL, tipo de aplicación…..

3. Agregamos la referencia xmlns:map="clr-namespace:Microsoft.Phone.Controls.

Maps;assembly=Microsoft.Phone.Controls.Maps“

4. Insertamos el control <map:Map Name="miMapa" CredentialsProvider="AwQh_41-o1y-

v1GpwaI3IG7ryv7eAlbWjsZFxJbYJVr_7GzHg2Rze"></map:Map>

Page 11: Modulo19 Localización

Control BingMaps

Cambiar el tipo de vista:

miMapa.Mode = new RoadMode();

miMapa.Mode = new AerialMode();

Cambiar el zoom:

if (miMapa.ZoomLevel < 20)

miMapa.ZoomLevel++;

if (miMapa.ZoomLevel > 1)

miMapa.ZoomLevel--;

Añadir Pushpin: Pushpin pin = new Pushpin();

pin.Content = "Aquí";

pin.Background = new SolidColorBrush(Colors.Orange);

pin.Location = coord;

miMapa.SetView(coord, 14);//indico las coordenadas y el zoom

miMapa.Children.Add(pin);

Page 12: Modulo19 Localización

Control BingMaps

Page 14: Modulo19 Localización