Compartir a través de


Este artículo proviene de un motor de traducción automática.

Windows Mobile

Utilice GPS Y asignaciones de Web para aplicaciones tengan en cuenta el consumo de ubicación

Christopher Mitchell

Descarga de código de la Galería de código de MSDN
Examinar el código en línea

En este artículo se describen:

  • Servicios Web de MapPoint
  • Almacenamiento en caché las tareas y asignaciones
  • Obtener los puntos de interés cercanos
  • Crear nuevas tareas
En este artículo se utilizan las siguientes tecnologías:
Windows Mobile 6, MapPoint

Contenido

Utilizar MapPoint para ubicación 
Las tareas y Pocket Outlook 
Arquitectura de aplicación 
Obtener cercanos puntos 
Agregar tareas 
Desplazarse hacia abajo de la carretera 

recientemente he movido a una casa nueva y algunos amigos tipo empleado un día completo ayudarme empaquetar y desempaquetar cuadros y organizar para conexiones de utilidad y todos los otros importantes a tareas pero tediosas de mover.  En mi forma de recuperar el último cuadro en la casa antiguo, casi olvidado recoger cena de mis amigos.  Tenía establecer un aviso en mi teléfono móvil de Windows, pero no pudo informarme cuando se controla derecha últimos el restaurante take-out más adecuado.

La solución que debía consistió un teléfono que me informa cuando estaba cerca de un lugar donde puede completar dicha tarea.  Una vez y aviso de la ubicación apropiada habría tenido nos disfrutando take-out en lugar de controla alrededor de una zona no resultan familiares después un día largo de cuadros de desplazamiento.

Windows Mobile ofrece varias interfaces y funciones que pueden ayudar a mantener el dispositivo informado acerca de su entorno, donde es, si tiene una señal, la cantidad de una señal y así sucesivamente.  Pero, ¿cómo se pueden utilizar estas características en sus aplicaciones?La más destacada y posiblemente útil de estas capacidades es el reconocimiento de la ubicación.  Esto debe permiten crear aplicaciones de reconoce la ubicación, que abarcan desde el programa de exploración de satélite bastante obvios a la lista mucho más sofisticada de tareas que se van a tratar aquí.

En este artículo se Examine los problemas relacionados con el uso de esta capacidad y el código adicional que debe escribir desarrollar aplicaciones útiles.  En este artículo, se describa el entorno de desarrollo de aplicaciones móviles y utilidades y mostrarle cómo crear una aplicación de lista de tareas reconoce la ubicación que puede le avise de una tarea cuando y donde es adecuado.

Utilizar MapPoint para ubicación

Mi aplicación de lista de tareas reconoce la ubicación, denominado wheretodo, necesita realizar varias tareas principales.  Necesita obtener información acerca de en el teléfono se encuentra geográficamente.  También necesita almacenar y supervisar las tareas.  Además, la aplicación necesita saber qué las tiendas y servicios están disponibles junto a la ubicación de actual el teléfono que se podría utilizado para resolver una tarea actual.  Por último, necesita proporcionar alertas en el teléfono.  La interfaz de la aplicación que se muestra en la figura 1 .

fig01.gif

Figura 1 Wheretodo aplicación

Lo primero que requiere la aplicación es datos geográficos.  Con el propósito de este artículo, decidí usar el  Servicio Web de Microsoft MapPoint . Este servicio Web es la tecnología subyacente para  Buscar mapas de Live  y  Virtual Earth y proporciona una búsqueda cerca de servicio para Europa y los Estados Unidos.  El código de ejemplo proporcionado utiliza configuración de datos europeo mapa; necesitará cambiarlo para que funcione en otro lugar.

MapPoint toma un códigos de latitud y longitud y búsqueda GPS para determinados tipos de almacenes como sus argumentos.  Se puede proporcionar la información de posición por la utilidad FakeGPS si se instala en un emulador o en smartphone.  (Consulte la barra de lateral de "FakeGPS" para obtener más información sobre esta utilidad).

MapPoint ofrece un servicio Web XML con una API de SOAP.  El servicio Web se divide en cuatro servicios principales: un servicio común, un servicio de búsqueda, un servicio de representación y un servicio de ruta.  El servicio principal de interés para esta aplicación es el servicio de búsqueda, pero si desea asignar direcciones al usuario o un mapa, los demás servicios puede utilizarse para ampliar la funcionalidad.

El servicio común (CommonServiceSoap) contiene las clases, métodos, y propiedades que son comunes a la búsqueda, distribuir y representar servicios o funciones de utilidad básica.

Puede utilizar el servicio de búsqueda (FindServiceSoap) para localizar direcciones, entidades geográficas, latitud y longitud coordenadas y puntos de interés (POI) de datos de servicio web MapPoint.  También puede analizar direcciones y devuelve información de ubicación para una latitud especificado y.

Sirve el servicio de representación (RenderServiceSoap) para dibujar mapas de las rutas y ubicaciones, colocar los marcadores, dibujar las regiones de polígono, establecer el tamaño del mapa y asignar la vista, seleccione puntos en un mapa, obtener información de ubicación sobre puntos y polígonos en un mapa y panorámica y acercar un mapa representado.

El servicio de ruta (RouteServiceSoap) genera rutas, indicaciones de conducción, y las representaciones de ruta calculado (utilizadas para representar una ruta resaltada en el mapa) basado en ubicaciones o puntos de referencia, establece las preferencias de segmento y la ruta y genera vistas de mapa de segmentos y las direcciones.

Un conjunto completo de  diagramas de clase de modelo de objetos se encuentra en MSDN.  MapPoint contiene los datos utilizados para la búsqueda, distribuir y representar servicios en un número de diferentes orígenes de datos según la región geográfica o tipo de información necesaria.  Podrá buscar una gama completa de  Artículos técnicos de MapPoint  Cómo utilizar el servicio de en MSDN.

Las tareas y Pocket Outlook

El Pocket Outlook objeto modelo (POOM) permite agregar menús y la funcionalidad a las aplicaciones de tareas y contactos en Windows Mobile y para manipular los elementos asociados y los datos.  Hay tres interfaces principales de interés para una aplicación reconoce la ubicación: IAppointment, ITask y IContact.

IAppointment representa una cita en la carpeta Calendario.  Un objeto cita puede representar una reunión, una cita única, o una cita periódica o reuniones.

ITask representa una asignada, delegada o self-assigned tarea para realizarse dentro de un intervalo de tiempo especificado.  Los elementos de tarea están incluidos en la carpeta de tareas.

IContact representa un contacto almacenado en la carpeta Contacts (Contactos).  Sus métodos se pueden utilizar para guardar, eliminar, duplicar o mostrar un contacto.  La interfaz IPOutlookItem­Collection puede utilizarse para agregar nuevos contactos o para recuperar los existentes.

La aplicación de ejemplo va a utilizar ITask.  (Funcionalmente, podría utilizar IAppointment, pero esa interfaz no es así adecuada para las necesidades inmediatas de la aplicación.) El POOM es similar al modelo de objetos de Outlook escritorio y puede obtener más información sobre ella en MSDN en la "  Diferencias entre el modelo de objetos de Pocket Outlook y el modelo de objetos de Outlook "artículo.

Arquitectura de aplicación

La aplicación reconoce la ubicación se compone de dos cadenas de funciones.  El primero es el sistema que supervisa las tareas actuales y los problemas, como se muestra en la figura 2 .  Las tareas se almacenan en una tabla de base de datos SQL Server­ Compact.  Además, un conjunto de datos auxiliares se almacena dentro de otra tabla denominada geocache.  Usar la tabla independiente es un medio de limitar la cantidad de conectividad de requiere, como explicará más adelante en este artículo.

fig02.gif

La Figura 2 supervisión y alertas de las tareas tengan en cuenta el consumo de ubicación

La información de los puntos cercanos se proporciona por el servicio Web de MapPoint Micro­soft.  Existen distintos orígenes de datos en el servicio web MapPoint para diferentes partes del mundo, y algunos tienen más capacidades que otros usuarios.  El origen de datos utilizado la aplicación de ejemplo es NavTech.EU.  Una vez que se recopila esta información, se pueden realizar algunos cálculos de distancia y emite alertas, donde corresponda.

La segunda cadena de eventos (consulte la figura 3 ) agrega las tareas a la lista tareas en el dispositivo Windows Mobile mediante la POOM.  Este marco de trabajo permite también el acceso al calendario y funciones de SMS.

fig03.gif

La figura 3 de flujo del sistema para agregar tareas para la aplicación Wheretodo

Las tareas y caché representa la parte primera de la cadena de eventos de supervisión y alerta.  El Administrador de tareas sólo obtiene una lista de tareas de la POOM.  También administra geocache, qué direcciones de los problemas con servicios Web en dispositivos de conectividad potencialmente limitada.  El nivel de conectividad del dispositivo puede abarcar desde conectividad permanente que sparsely conectado o sin conexión en absoluto.

Para adaptarse con la gran variedad de intensidad de la conectividad, necesita una directiva de caché decente para los datos del servicio Web y un sistema sencillo que sabe cómo sacar el máximo partido de la conectividad.  Aunque fácilmente se puede concebir escenarios muy complejos, se estableció una directiva de caché radio simple con el propósito de este artículo.  Por ejemplo, se colocará una consulta al servicio Web de MapPoint busca todos los restaurantes take-out chinos en un radio determinado de la ubicación actual, decir kilómetros 80 (km).  Una vez que se ha pasado 40 km en cualquier dirección una, se emite una nueva búsqueda.  Esto se basa en la entidad que todas las consultas al servicio Web es costosa.

También facilita la suposición de que la distancia que viaja fuera desde el punto en que ha especificado la tarea no es probable que sea mayor km 40.  Como la distancia que utiliza para controlar las acciones de la caché es probable que varían de una persona a otra y país a país, está diseñado para ser de entrada por el usuario.

Registros de donde se han ejecutado las consultas se almacenan en la base de datos geocache­log y se comprueba antes de realizan las consultas adicionales para que no se solicita información duplicada desde el servicio Web.  También proporciona la oportunidad para que el sistema sea rellenadas previamente con un volumen considerable de información.

FakeGPS

sidebarfig.gif

aplicación de FakeGPS

el SDK de Windows Mobile 6 contiene una aplicación de utilidad denominada FakeGPS que permite probar la aplicación con datos GPS simuladas.  Para información acerca de instalar y probar mediante FakeGPS, vea el artículo de MSDN Library"  Mediante la utilidad Fake­GPS ."

FakeGPS lee un conjunto pre-recorded de instrucciones de GPS.  Los datos GPS se pueden obtener desde un dispositivo GPS real utilizando una grabadora de datos sin procesar GPS.  El archivo resultante se lee mediante un dispositivo de FakeGPS y ejecute de puede ser nuevo, cambiar datos de ubicación, para fines de prueba de simulación.  Por ejemplo, registra un viaje de London para recopilar datos de la aplicación y, a continuación, re-enacted el viaje a través de FakeGPS.

Obtener cercanos puntos

El siguiente componente define cómo se rellena la geocache.  Cuando la aplicación necesita buscar una ubicación, se llama a una función GetNearByPOI (consulte la figura 4 ).  El código de consulta el servicio web MapPoint.  Observe que el código que se muestra aquí se ha simplificado para mayor claridad y es diferente en la descarga de código.

La figura 4 obtener los puntos de interés cercanos

private void GetNearByPOI(
  string KeyWord, LatLong CurrentPosition) {

  FindServiceSoap findService = new FindServiceSoap();
  FindNearbySpecification findNearBySpec = new FindNearbySpecification();
  findService.Credentials = 
    new System.Net.NetworkCredential(myUserName, myPassword);
  findService.PreAuthenticate = true;

  findNearBySpec.Distance = Convert.ToDouble(inputdistance.Text);
  findNearBySpec.LatLong = new LatLong();
  findNearBySpec.LatLong.Latitude = CurrentPosition.Latitude;
  findNearBySpec.LatLong.Longitude = CurrentPosition.Longitude;

  findNearBySpec.Filter = new FindFilter();
  //findNearBySpec.Filter.EntityTypeName = KeyWord;
  findNearBySpec.Filter.EntityTypeName = "FoodType3"; // SIC CODE
  findNearBySpec.DataSourceName = "NavTech.EU";

  FindResults foundResults;
  foundResults = findService.FindNearby(findNearBySpec);

  string connectionString;
  string fileName = System.IO.Path.GetDirectoryName(
    System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + 
    "\\wheretodo.sdf";
  string password = "sa";
  connectionString = string.Format("DataSource=\"{0}\"; Password='{1}'", 
    fileName, password);
  SqlCeConnection cn = new SqlCeConnection(connectionString);
  cn.Open();
  SqlCeCommand cmd;

  //Loop Round and add it to the geocache
  foreach (FindResult fr in foundResults.Results) {
    //This needs to include LongLat in geocache
    string sql = 
      "insert into geocache2 (POI_Name, POI_Address, POI_Tel, POI_Web, " +
      "POI_POST_ZIP, POI_Lat, POI_Long, POI_KeyWord) " +
      "values (@Name, @Address, @Tel, @Web, @POST_ZIP, '" + 
      fr.FoundLocation.LatLong.Latitude.ToString() + 
      "', '" + fr.FoundLocation.LatLong.Longitude.ToString() + "', '" + 
      KeyWord.ToString() + "')";
    cmd = new SqlCeCommand(sql, cn);
    cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 255, "Name").Value = 
      fr.FoundLocation.Entity.Properties[0].Value.ToString();
    cmd.Parameters.Add("@Address", SqlDbType.NVarChar, 255, "Address").Value = 
      fr.FoundLocation.Entity.Properties[1].Value.ToString() + 
      fr.FoundLocation.Entity.Properties[2].Value.ToString();
    cmd.Parameters.Add("@Tel", SqlDbType.NVarChar, 255, "Tel").Value = 
      fr.FoundLocation.Entity.Properties[9].Value.ToString();
    cmd.Parameters.Add("@Web", SqlDbType.NVarChar, 255, "Web").Value = 
      "http://m.live.com";
    cmd.Parameters.Add("@POST_ZIP", SqlDbType.NVarChar, 255, "POST_ZIP").Value = 
      fr.FoundLocation.Entity.Properties[7].Value.ToString();
    cmd.ExecuteNonQuery();

    //Update geocachelog
    sql = "insert into GeoCodeLog (Keyword, Lat, Long ) values ('" + KeyWord + 
      "', '" + fr.FoundLocation.LatLong.Latitude.ToString() + "', '" + 
      fr.FoundLocation.LatLong.Longitude.ToString() + "' )";
    cmd = new SqlCeCommand(sql, cn);
    cmd.ExecuteNonQuery();
  }
}

Eche un vistazo a la sección en la que se denominan CurrentPos­ition.lat­itude y CurrentPosition.Longitude.  Esto es, en última instancia, deriva el GPS Intermediate Driver, una capa de software que se encuentra entre las aplicaciones y el controlador de dispositivo de hardware GPS.  Este nivel de abstracción permite que las aplicaciones se escriben una vez y trabajar con varios dispositivos GPS.  La API de controlador GPS Intermediate se expone a través de una biblioteca de código nativo.  Puede obtener acceso a esta biblioteca desde el código administrado mediante el ejemplo que se incluye con el SDK de Professional (consulte" de Windows Mobile 6  Con GPS Intermediate Driver desde código administrado)".

Una vez que tenga la ubicación actual y cercanos POI que son relevantes para la tarea, aquí identificada por códigos de clasificación industrial estándar (SIC) utilizados en el origen de datos Navtech.EU, es necesario determinar exactamente cuánto estos puntos son desde su ubicación actual.  He usado la longitud y los valores de latitud se devuelven desde el servicio Web y el GPS (en este caso, FakeGPS); figura 5 se muestra cómo convertir estos valores a distancia.

La figura 5 la distancia de equipos

private double GetLatLongTuppleDistance(
  double Lat1, double Long1, double Lat2, double Long2) {

  //Convert Degress to Radians for Calculations
  double Lat1r = ConvertDegreesToRadians(Lat1);
  double Lat2r = ConvertDegreesToRadians(Lat2);
  double Long1r = ConvertDegreesToRadians(Long1);
  double Long2r = ConvertDegreesToRadians(Long2);

  // Spherical law of cosines formula—ignores the effect of hills
  double R = 6371; // Earth's radius (km)
  double d = Math.Acos(Math.Sin(Lat1r) * Math.Sin(Lat2r) +
    Math.Cos(Lat1r) * Math.Cos(Lat2r) *
    Math.Cos(Long2r—Long1r)) * R;
  //Returns distances in km
  return d;
} 

Una función spherical trigonométricas según la ley de cosenos esférica (que generalizes el theorem Teorema) proporciona la función que traduce pares de latitud y longitud en km distancias.  Esto Obviamente, realiza algunas suposiciones masivas sobre las acciones bloqueo dónde se encuentra en la ubicación intentas buscar.  Como la tierra no es una esfera perfecta, habrá errores en mediante estas fórmulas.  De kilómetros, divida km por 1.609344 y, en caso de está nipping en el barco para obtener algunas herramientas, de millas náuticas dividir km por 1.852. 

La última parte de esta cadena de eventos es emitir la alerta al usuario si se encuentra una solución para la tarea dentro de una distancia determinada desde su ubicación actual.  Tal como se esta distancia se determina en el modo de transporte, controla, análisis, ciclo y así sucesivamente, esto ha dejado como una entrada para el usuario. 

Agregar tareas

Por supuesto, antes de la aplicación puede buscar una ubicación, el usuario necesita agregar tareas al dispositivo móvil.  El POOM refleja el modelo de objetos de Outlook, pero su ámbito de la funcionalidad se reducida para dar cabida a las restricciones prácticas de los dispositivos móviles. 

Mediante el POOM, es sencillo modificar y mostrar citas, tareas y elementos de contacto, así como manipular las carpetas que los contienen.  Este es el código para crear un elemento de tarea:

OutlookSession outlooksession = new OutlookSession();
Task NewTask = new Task();
NewTask.Body = textBox2.Text.ToString();

string MyString = dateTimePicker2.Value.ToShortDateString() + " " + dateTimePicker1.Text.ToString();
DateTime MyDateTime = new DateTime();
MyDateTime = DateTime.ParseExact(MyString, "M/d/yy h:mm:ss tt", null);
NewTask.DueDate = MyDateTime.ToUniversalTime();
NewTask.Subject = textBox1.Text.ToString();
outlooksession.Tasks.Items.Add(NewTask);

Varios parámetros se pueden modificar para establecer la fecha de finalización y el texto de cuerpo de tarea y, a continuación, agregarla a la POOM. 

Este componente constituye la última de las dos cadenas de componentes que se utilizan para proporcionar la funcionalidad de la aplicación wheretodo.  El sistema de interfaz de usuario propio es muy sencillo y proporciona un medio de configuración de toda la información relevante y determinar los códigos de SIC la aplicación se pueden buscar fuera.  La aplicación general sólo se ajusta en un bucle infinito sólo para ilustrar el uso de aplicaciones reconoce la ubicación.  Podría fácilmente agregar esto como un servicio de fondo a tu dispositivo móvil para facilitar una integración más eficaz y más claro en el entorno de Windows Mobile 5 o de Windows Mobile 6. 

Recursos de datos móviles

Escriba código una vez para ambos móviles y aplicaciones de escritorio

Continuar lugares: las aplicaciones adaptables para Windows Mobile

Puntos de datos: acceso A datos desde una aplicación móvil

Desplazarse hacia abajo de la carretera

Ya ha visto un tipo de dispositivo reconoce la ubicación y una herramienta que facilita el desarrollo de estas aplicaciones.  Este concepto básico de una lista de tareas de reconoce la ubicación podría ampliarse fácilmente para RFID. 

Hay mejoras que se pueden realizar a este código que se aplican a cualquier aplicación reconoce la ubicación.  El conjunto mayor de estos se puede resumir por cómo se adapta el reconocimiento de ubicación de con los otros servicios de contexto, tenga en cuenta que se ejecutan en la mayoría de los teléfonos móviles.  Las tareas no tengan una idea ¿qué más que está intentando realizar, sólo donde es.  Puede destinar tareas a una hora y una ubicación para que se activan mediante que obtener cerca de algo en un momento determinado (por ejemplo, indicaciones de casa de trabajo).  Aún mejor, el aviso de tarea se sabe que tiene una reunión en 10 minutos, y también podría saber que no es suficiente tiempo para obtener las marcas, incluso si está pasando la oficina de correos en la forma a la reunión. 

Si está interesado en crear un instalador personalizado para que esto o su propia recién actualizado reconoce la ubicación de aplicación, vea mi artículo del problema de octubre de 2007 deMSDN Magazine(Ajustar el volumen de anillo de ruido ambiente). 

*Me gustaría dedicar en este artículo a Tom Passey, un amigo estimado que, junto con su esposa, ha observado después me en muchas ocasiones, proporcionando de memorias grandes.  Desear la mejor. *

Christopher Mitchell había terminado su PhD en aprendizaje del equipo y música y sonido señal procesamiento, era un tipo KAUFFMAN/NCGE y actualmente es realizar un inicio en Reino Unido Cambridge.  Es un profesor a tiempo parcial Universidad Anglia Ruskin, Cambridge, Reino Unido.  Puede ponerse en contacto con Chris en Chris.Mitchell@anglia.AC.uk.