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:
|
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 .
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 IPOutlookItemCollection 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.
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 Microsoft. 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.
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 geocachelog 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
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 FakeGPS ."
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 CurrentPosition.latitude 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.