Il presente articolo è stato tradotto automaticamente.
Windows Mobile
Utilizzare GPS E mappe Web per le applicazioni Aware percorso
Download codice disponibile dalla Raccolta di codice di MSDN
Selezionare il codice in linea
Nell'articolo viene descritto:
|
In questo articolo vengono utilizzate le seguenti tecnologie: Windows Mobile 6, MapPoint |
Contenuto
Utilizzo di MapPoint per ubicazione
Le attività e Pocket Outlook
Architettura di applicazione
Recupero nelle vicinanze punti
Aggiunta di attività
Lo spostamento verso il basso la strada
è stata recentemente spostata una nuova casa e alcuni amici tipo trascorso un giorno intero aiutare mi pack e decomprimere caselle, disporre per utilità hookups e tutti gli altre importanti attività ma noiosa di spostamento.Sul mio modo da recuperare l'ultima casella a casa precedente, HO dimenticato quasi prelevare cena per amici.È stato impostato un promemoria al telefono Windows Mobile, ma Impossibile Avvisa quando è stato determinano a destra oltre il ristorante take-out più semplice.
La soluzione che È necessario non è un telefono informato l'utente quando ero accanto un punto in cui È possibile completare attività suddetto.Un tempo e un promemoria appropriata posizione sarebbe è stata ci godendo take-out anziché determinano intorno a una zona non riconosciuto dopo un giorno lungo di spostamento finestre.
Windows Mobile fornisce molte interfacce e funzionalità che consentono di mantenere il dispositivo informato sulla proprio ambiente, dove, se questo dispone di un segnale, la quantità di un segnale e così via.Ma come possono esse essere utilizzate nelle applicazioni?La più evidente e probabilmente utile di queste funzionalità sono consapevolezza di posizione.Questo dovrebbe consentono di creare applicazioni dipendente dalla posizione, compresi tra il programma di spostamento piuttosto ovvia satellite e l'elenco di attività molto più sofisticato che illustrato di seguito.
In questo articolo verrà esaminare i problemi correlati all'utilizzo di questa funzionalità e il codice aggiuntivo, che è necessario scrivere per lo sviluppo di applicazioni utile.In questo articolo, verrà vengono illustrati l'ambiente di sviluppo di applicazioni per dispositivi mobili e le utilità e viene illustrato come creare un'applicazione elenco di attività di dipendente dalla posizione possibile ricordare di un'attività quando e dove è appropriato.
Utilizzo di MapPoint per ubicazione
Applicazione elenco attività di dipendente dalla posizione, denominata wheretodo, deve eseguire diverse attività di base.È necessario ottenere informazioni su dove il telefono è posizionato geograficamente.Inoltre è necessario archiviare e monitorare le attività.Inoltre, l'applicazione deve sapere quali negozi e servizi sono disponibili nella posizione corrente del telefono che potrebbe essere utilizzate per risolvere un'attività corrente.Infine, è necessario fornire avvisi per il telefono.L'interfaccia dell'applicazione è illustrato nella Figura 1 .
Figura 1 Wheretodo applicazione
La prima cosa che è necessario l'applicazione è dati geografici.Allo scopo di questo articolo si È scelto di utilizzare laServizio Web di Microsoft MapPoint. Questo servizio Web è la tecnologia sottostante perRicerca mappe LiveeCarta virtualee fornisce una ricerca nelle vicinanze servizio per Europa e Stati Uniti.Il codice di esempio fornito utilizza le impostazioni di mapping Europa dei dati e sarà necessario modificare questa per renderlo di lavoro in un'altra.
MapPoint accetta un codici latitudine e longitudine e ricerca GPS per tipi specifici di archivi come argomenti.Le informazioni relative alla posizione possono essere fornite dall'utilità FakeGPS quando installato in un emulatore o smartphone.(Vedere il riquadro "FakeGPS" per ulteriori informazioni di questa utilità).
MapPoint fornisce un servizio Web XML con UN'API di SOAP.Il servizio Web è suddivisa in quattro servizi principali: un servizio comune, un servizio di ricerca, un servizio di rendering e un servizio di ciclo di lavorazione.Il servizio principale di particolare interesse per questa applicazione è il servizio di ricerca, ma se si desidera fornire istruzioni l'utente o una mappa, è possibile utilizzare altri servizi per estendere le funzionalità.
Il servizio comune (CommonServiceSoap) contiene le classi, metodi, e le proprietà comuni di ricerca route e il rendering di servizi o funzioni di utilità di base.
È possibile utilizzare il servizio di ricerca (FindServiceSoap) per individuare gli indirizzi, geografica entità, latitudine e longitudine coordinate e punti di interesse (POI) dai dati di servizio Web MapPoint.È inoltre possibile analizzare gli indirizzi e restituisce informazioni di percorso per un specificato latitudine e longitudine.
È possibile utilizzare il servizio di rendering (RenderServiceSoap) per disegnare mappe di cicli di lavorazione e percorsi, inserire simboli, disegnare le aree del poligono, impostare la dimensione della mappa del e mappare la visualizzazione, selezionare i punti su una mappa, ottenere informazioni di percorso relative punti e poligoni su una mappa e panoramica e zoom di una mappa di cui è stato eseguito il rendering.
Il servizio di ciclo di lavorazione (RouteServiceSoap) genera route, stradali, e le rappresentazioni di ciclo di lavorazione calcolato (utilizzate per il rendering di una route evidenziata nella mappa) basato su posizioni o waypoints, imposta le preferenze di segmento e cicli di lavorazione e genera visualizzazioni della mappa dei segmenti e le indicazioni stradali.
Un insieme completo didiagrammi di oggetti modello classeè in MSDN.MapPoint contiene i dati utilizzati per la ricerca, routing e il rendering di servizi in un numero di origini dati diverse a seconda dell'area geografica o tipo di informazioni richieste.Sarà possibile trovare una gamma completa diArticoli tecnici MapPointsull'utilizzo del servizio su MSDN.
Le attività e Pocket Outlook
POOM (Pocket Outlook Object Model) consente di aggiungere i menu e funzionalità alle applicazioni attività e contatti in Windows Mobile e per modificare le elementi associati e i dati.Sono disponibili tre interfacce principali di particolare interesse per un'applicazione dipendente dalla posizione: IAppointment, ITask e IContact.
IAppointment rappresenta un appuntamento nella cartella Calendario.Un oggetto appuntamento può rappresentare una riunione, un appuntamento singolo o un appuntamento ricorrente o la riunione.
ITask rappresenta un assegnata, delegata o self-assigned attività per essere eseguita all'interno di un intervallo di tempo specificato.Elementi attività sono contenuti all'interno della cartella attività.
IContact rappresenta un contatto nella cartella Contatti.I metodi consente di salvare, eliminare, duplicare o visualizzare un contatto.L'interfaccia IPOutlookItemCollection può essere utilizzato per aggiungere nuovi contatti o per recuperare quelle esistenti.
L'applicazione di esempio verrà utilizzato ITask.Dal punto di vista funzionale, è possibile utilizzare IAppointment, ma tale interfaccia non è anche adatto alle esigenze immediate dell'applicazione. Il POOM è simile a modello a oggetti di Outlook sul desktop e per ulteriori informazioni su MSDN nel "Differenze tra il modello a oggetti Pocket Outlook e il modello a oggetti di Outlook"articolo.
Architettura di applicazione
L'applicazione dipendente dalla posizione è costituito da due catene di funzioni.Il primo è il sistema che controlla le attività corrente e i problemi, come illustrato nella Figura 2 .Le attività vengono memorizzate in una tabella di database SQL Server Compact.Inoltre, un insieme di dati ausiliari verrà memorizzato all'interno di un'altra tabella denominata geocache.Utilizzo tabella separata è un mezzo per limitare la quantità di connettività necessaria, come verrà illustrato più avanti in questo articolo.
Nella figura 2 monitoraggio e gli avvisi di attività Aware percorso
L'informazione per i punti nelle vicinanze viene fornita dal servizio Web MapPoint Microsoft.Esistono diverse origini dati nel servizio Web MapPoint per diverse parti del mondo e alcuni sono più funzionalità rispetto ad altri.L'origine dati utilizzato dall'applicazione di esempio è NavTech.EU.Una volta queste informazioni vengono raccolte, è possibile eseguire alcuni calcoli distanza e avvisi emesso, dove applicabile.
La seconda catena di eventi (vedere la Figura 3 ) aggiunge attività all'elenco di attività sul tuo dispositivo Windows Mobile tramite il POOM.Questa infrastruttura consente inoltre l'accesso alle funzioni SMS e calendario.
Nella figura 3 di flusso di sistema per l'aggiunta di attività per l'applicazione Wheretodo
Le attività e cache rappresenta la prima parte della catena di avviso e monitoraggio di eventi.Task manager Ottiene semplicemente un elenco delle attività dal POOM.Gestisce anche il geocache, risolve i problemi all'utilizzo di servizi Web su periferiche di connettività limitata potenzialmente.Il livello di connettività del dispositivo può variare da connettività permanente caso connessi o nessuna connessione affatto.
Per gestire l'intervallo di grandi dimensioni di livello di connettività, è necessario un criterio di cache decent per i dati del servizio Web e un sistema semplice che sa come utilizzare al meglio la connettività.Sebbene sia molto complesse può facilmente essere immaginate, un criterio di cache raggio semplice è stato stabilito allo scopo di questo articolo.Ad esempio, una query verrà posto al servizio Web MapPoint ricerca di tutti i ristoranti take-out cinesi all'interno di un raggio determinato dalla posizione corrente, pronunciare chilometri 80 (km).Una volta che si sono andato km 40 in qualsiasi direzione di una, viene generata una nuova ricerca.Si basa sul principale che tutte le query al servizio Web è costosa.
Rende il presupposto che la distanza che viaggio lontano dal punto in cui è stato immesso l'attività non sarà probabilmente maggiore km 40.La distanza che consente di controllare le azioni di cache è probabile che variano da una persona per utente e il paese a paese, è progettato per l'utente di input.
I registri di in cui sono state eseguite query vengono archiviati nel database geocachelog e controllati prima che qualsiasi query aggiuntive vengano apportate in modo che le informazioni duplicate non viene richiesto dal servizio Web.Fornisce inoltre l'opportunità per il sistema da prepopolate con un volume diverso di informazioni.
FakeGPS
applicazione FakeGPS
di Windows Mobile 6 SDK contiene un'applicazione di utilità denominata FakeGPS che consente di testare l'applicazione con i dati GPS simulati.Per informazioni sull'installazione e test utilizzando FakeGPS, vedere l'articolo di MSDN Library"Utilizzare l'utilità fakeGPS."
FakeGPS legge un pre-recorded insieme di istruzioni GPS.È possibile ottenere dati GPS da un dispositivo GPS reale utilizzando un registratore di dati non elaborato GPS.Il file risultante viene letto da un dispositivo FakeGPS e può essere nuovamente, la simulazione di modifica dei dati di posizione, a scopo di testing.Ad esempio, registrato un viaggio intorno a Milano per raccogliere dati per l'applicazione e quindi re-enacted viaggio attraverso FakeGPS.
Recupero nelle vicinanze punti
Il componente successivo definisce come viene popolato il geocache.Quando l'applicazione deve individuare un'ubicazione, viene chiamata una funzione GetNearByPOI (vedere la Figura 4 ).Il codice esegue una query il servizio Web MapPoint.Si noti che il codice riportato di seguito è stato semplificato per maggior chiarezza e che è diverso da quella nel download del codice.
Nella figura 4 ottenere nelle vicinanze punti di interesse
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();
}
}
Esaminiamo la sezione in cui sono chiamati CurrentPosition.Latitude e CurrentPosition.Longitude. Questo in definitiva è derivato da driver Intermediate GPS, un livello di software che si trova tra le applicazioni e il driver del dispositivo per hardware GPS. Questo livello di astrazione consente alle applicazioni di essere scritti una sola volta e intervenire su più dispositivi GPS. L'API di driver Intermediate GPS viene esposto tramite una libreria di codice nativo. È possibile accedere a questa raccolta dal codice gestito utilizzando l'esempio è incluso in Windows Mobile 6 Professional SDK (vedere" Utilizzando il driver Intermediato GPS da codice gestito)".
Una volta che si dispone la posizione corrente e nelle vicinanze POI rilevanti per l'attività, identificata qui per i codici di classificazione industriale standard (SIC) utilizzati nell'origine dei dati Navtech.EU, è necessario determinare esattamente quanto i punti sono dalla posizione corrente. Dopo aver utilizzato la longitudine, latitudine valori restituiti dal servizio Web e GPS (in questo caso FakeGPS e prevedere 5 illustrato come è possibile riconvertire i valori a distanza.
Nella figura 5 la distanza di utenti
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 funzione trigonometriche spherical in base a leggi sferica di cosines (che generalizes il theorem Pythagorean) offre la funzione che converte le coppie di latitudine e longitudine in km distanze. In questo modo Ovviamente alcune ipotesi rilevanti sulle operazioni di blocco in cui si è il percorso si sta cercando di trovare. La Terra non è una sfera perfetta, nella saranno presenti errori utilizzando le formule. Per chilometri, dividere km per 1.609344 e, nel caso in cui si nipping out nell'imbarcazioni per ottenere alcuni Pane, per Miglia nautiche dividere km per 1.852.
La parte finale di questa catena di eventi è per emettere l'avviso per l'utente se una soluzione per l'attività si trova all'interno di una distanza dalla posizione corrente. Come questa distanza è determinata dalla modalità di trasporto, determinano, esame, cicli e così via, è stato lasciato come input per l'utente.
Aggiunta di attività
Naturalmente, prima che l'applicazione può venire trovata un'ubicazione, l'utente deve aggiungere attività al dispositivo portatile. Il POOM riflette il modello a oggetti di Outlook, ma è ridotto l'ambito di funzionalità per soddisfare i vincoli pratici di dispositivi mobili.
Utilizzando il POOM, è semplice modificare e visualizzare appuntamenti, attività e contatti, nonché modificare le cartelle che li contengono. Ecco il codice per creare un elemento di attività:
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);
Per impostare la data di fine e il corpo del testo di attività e quindi aggiungerlo al POOM è possono modificare diversi parametri.
Questo componente costituisce l'ultimo di due catene dei componenti utilizzati per fornire la funzionalità dell'applicazione wheretodo. Il sistema dell'interfaccia utente stesso è molto semplice e consente di impostazione delle informazioni rilevanti e determinare i codici SIC l'applicazione verrà da ricerca out. L'applicazione globale semplicemente viene incluso in un ciclo infinito solo per illustrare l'utilizzo di applicazioni dipendente dalla posizione. È molto semplice possibile aggiungere questo come un servizio di sfondo al tuo dispositivo portatile per renderlo un'integrazione più efficiente e pulitura nell'ambiente Windows Mobile 5 o Windows Mobile 6.
Risorse di dati mobili
Scrittura codice una sola volta per entrambi Mobile e le applicazioni desktop
Going posizioni: adattabili applicazioni per Windows Mobile
Concetti sui dati: accesso ai dati da un'applicazione per dispositivi mobili
Lo spostamento verso il basso la strada
Si è visto un tipo di dispositivo dipendente dalla posizione e uno strumento che semplifica lo sviluppo di tali applicazioni. Questo concetto di base di un elenco di attività di dipendente dalla posizione può essere facilmente estesa per RFID.
Esistono miglioramenti che è possibile apportare al codice applicabili a qualsiasi applicazione dipendente dalla posizione. L'insieme più di questi può essere riepilogato per come la consapevolezza percorso collega in con gli altri servizi di contesto conoscenza gestirne la maggior parte dei telefoni cellulari. Le attività non sono un'idea che altro si sta tentando solo in cui sono scopo. È può assegnare attività per un'ora e un percorso in modo che vengono generati dall'utente durante il recupero accanto a un elemento in un momento (supponga che, determinano casa dall'ufficio) specifico. Ancora meglio, il promemoria attività necessario conoscere che si dispone di una riunione in 10 minuti e necessario inoltre conoscere non tempo sufficiente per ottenere indicatori, anche se si passano alla centrale su quella per la riunione.
Se si desidera creazione di un programma di installazione personalizzato per questo o proprio appena aggiornato dipendente dalla posizione dell'applicazione, vedere il mio articolo dal numero di ottobre 2007 di MSDN Magazine (informazioni in lingua inglese) (Regolare il volume di chiamata di rumore ambiente).
Desidera dedicare in questo articolo a Tom Passey, un amico Gentile che, con sua moglie è controllata dopo me in molti casi, fornendo ricordi grande. Necessario tutte al meglio.
Davide Mitchell terminato suo PhD nella formazione di computer e musica e suoni segnalare l'elaborazione, era un fellow KAUFFMAN/NCGE e attualmente è undertaking un avvio in Europa Cambridge. È un lecturer a tempo parziale in Italia Ruskin University, Cambridge, Regno Unito. È possibile contattare Chris aChris.Mitchell@anglia.ac.uk.