WP7 e la geolocalizzazione

Nello sviluppo del client per Decoro Urbano, un aspetto essenziale è quello della localizzazione.

WP7 mette a disposizione un servizio che utilizza in modo efficiente tre fonti di dati, secondo la disponibilità: GPS, Wi-Fi e rete cellulare. vi sono due livelli di precisione (standard e alta) e la possibilità di definire un valore di distanza minima entro la quale non deve essere segnalata alcuna variazione di posizione. In tal modo il consumo della batteria viene ridotto al minimo. E’ comunque buona prassi, nello sviluppo della propria applicazione, attenersi alle buone pratiche d’uso descritte qui.

Io, per maggiore comodità, ho wrappato il servizio in una classe “GeoPosition” che gestisce il servizio (più o meno secondo qaunto descritto qui) esponendo le proprietà utili quali lo stato del servizio, la posizione, ecc. attraverso l’ INotifyPropertyChanged. In questo modo, inserendo nel ViewModel una proprietà di tipo GeoPosition posso aggiornare la view utilizzando il classico meccanismo di binding. Poiché al cambio di posizione corrisponde una chiamata al web service di Decoro Urbano che ritorna il nome del Comune ed alcune informazioni associate (ad esempio se tale Comune partecipa al progetto), è stato divertente provare sull’emulatore e scoprire che mi trovavo a Redmon, che al momento non partecipa a Decoro Urbano (ma mai dire mai!) :-D

PosizioneRedmond

Il motivo è semplice. Nell’emulatore il servizio fornisce la posizione di default. Cambiando manualmente la posizione nella mappa dall’apposita finestra dell’emulatore (ad esempio su viale Mazzini, a Roma), otteniamo in asincrono la modifica del testo nella view:

PosizioneRoma

Riassumendo: il Location Service aggiorna la proprietà posizione della classe“GeoPosition” che notifica il suo cambiamento mediante INotifyPropertyChanged, il mio ViewModel lancia una richiesta HTTP asincrona al servizio web di Decoro Urbano. Quando viene ricevuta la risposta viene modificata la proprietà “UserStatAndPositionDescription” che restituisce il testo da mostrare nella view. Anche quest’ultima modifica è segnalata tramite INotifyPropertyChanged e quindi la view viene automaticamente aggiornata.

Windows Phone Rulez!

«gennaio»
domlunmarmergiovensab
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234