I dispositivi mobili odierni hanno percorso una lunga strada in soli tre brevi anni, Gli attuali device siano essi smartphone, tablet supportano una vasta gamma di funzioni utili che vanno oltre alla semplice telefonata. Tra le tante funzioni una delle certamente più utili è la geo-localizzazione. Molti dispositivi iPhone e Android sono dotati di dispositivo GPS in grado di produrre dati geografici affidabili.
Qui vedremo le capacità di geo-localizzazione di HTML5. Infatti con il nuovo HTML5, il W3C ha sviluppato una serie di API per recuperare in modo efficace dal dispositivo lato client (cioè il vostro iPhone 3G +, Android 2.0+ ma anche altri smartphone, o semplicemente il vostro browser desktop) le informazioni di posizionamento geografico con JavaScript della richiesta. Per coloro che sono interessati a leggere su specifiche geo-localizzazione del W3C ecco il link
L’API di geo-localizzazione non identificherà come sono state determinate le informazioni sulla posizione.
Non sapere come è stata ottenuta la geo-localizzazione di solito non è un problema, ma si notarà che l’accuratezza delle informazioni sulla posizione può variare notevolmente a seconda della tecnica utilizzata.

Funzioni asincrone

Una funzione asincrona è una funzione che viene eseguita al di fuori del flusso principale del programma. Nel contesto di JavaScript, significa che il nostro codice chiamerà una funzione e quindi continuerà ad eseguire le altre istruzioni. Quando si segue questo modello, il nostro codice dovrebbe essere simile a questo:

Dal momento che la risposta al ‘fa_qualcosa’ do_something() è restituita in modo asincrono, dobbiamo chiamare un funzione che riceverà la risposta la utilizzi. Per questo dobbiamo definire un’altra funzione, handle_response_to_do_something (), che consente di visualizzare il risultato in una finestra di dialogo.
Si ma perchè abbiamo bisogno di una chiamata asincrona ?
Perché quando la nostra applicazione tenta di interrogare la sua posizione, l’utente del dispositivo deve accettare di condividere le sue informazioni di posizione con la nostra applicazione. Se questa azione non è asincrona, tutto all’interno del browser resta congelato finché l’utente risponde. Ovviamente non è bello.

GetCurrentPosition API

Il primo metodo che ci interessa della API è GetCurrentPosition (). Quando viene chiamato, in caso di successo, questo metodo deve invocare il suo argomento successCallback associato con un oggetto di posizione come argomento. Se il tentativo fallisce, e il metodo è stato richiamato con un argomento errorCallback non nullo, questo metodo deve richiamare errorCallback con un oggetto PositionError come argomento.
Cominciamo creando la nostra pagina HTML5 .

La prima riga definisce che questa è una pagina HTML5, dobbiamo ora inserire un pulsante che ci darà la nostra posizione, quindi inseriamo

, il codice diventerà:

Ora dobbiamo inserire del Javascript per avviare il processo di interrogazione della posizione corrente. Notare come i tag di script non necessitano di attributi tipo grazie al nuovo HTML5.

Nel codice possiamo notare l’uso di jQuery, altrimenti avremmo dovuto scrivere codice aggiuntivo per verificare che la pagina sia stata caricata, ma non ha nulla a che fare con la geo-localizzazione. Usiamo sempre jQuery poi per assegnare un evento click al pulsante che abbiamo definito in precedenza. Abbiamo scritto anche la funzione initiate_geolocation () che sarà eseguita quando si preme il pulsante e la funzione handle_geolocation_query (posizione) per ottenere i dati di geo-localizzazione in modo asincrono attraverso l’argomento di position.
A questo punto se si esegue il codice in un browser che supporta la geo-localizzazione si dovrebbe vedere un alert con le coordinate di latitudine e longitudine. Questo funziona se l’utente accetta di condividere le sue informazioni di posizione con l’applicazione sito web / web, ma se lui non vuole condividere queste informazioni? Oppure cosa succede se c’è un problema nel trovare queste informazioni?
Modifichiamo il nostro codice per essere in grado di rilevare questi problemi attraverso la definizione di un’altra funzione che viene eseguita solo quando c’ è un problema di recupero dei dati di geo-localizzazione. Vediamo come sarà necessario modificare il nostro codice:

Nel codice abbiamo introdotto una nuova funzione, handle_errors che prende come argomento l’ errore. Ispezionando l’argomento di errore, possiamo controllare che tipo di errore si è verificato. Normalmente, il browser identifica uno di questi tre errori:

– L’ utente ha scelto di non condividere i dati di posizione
– Il dispositivo non è stato in grado di ottenere i dati di posizione
– TimeOut dispositivo in attesa di recuperare i dati di posizione

La seguente è la descrizione secondo le specifiche del W3C:

Gli attributi di latitudine e longitudine sono le coordinate geografiche specificate in gradi decimali.
L’attributo di precisione indica il livello di precisione delle coordinate di latitudine e longitudine. Si precisa in metri e deve essere supportato da tutte le implementazioni.
L’attributo altitudine indica l’altezza della posizione, indicata in metri sopra il WGS84 ellissoide. Se l’implementazione non può fornire informazioni altitudine, il valore di questo attributo deve essere nullo.
L’attributo altitudeAccuracy è specificato in metri. Se l’implementazione non può fornire informazioni altitudine, il valore di questo attributo deve essere nullo.
L’attributo intestazione indica la direzione di marcia del dispositivo che ospita ed è specificato in gradi partendo orario rispetto al Nord geografico. Se l’applicazione non è in grado di fornire informazioni di intestazione, il valore di questo attributo deve essere nullo.
L’attributo velocità indica la velocità di marcia attuale del dispositivo che ospita ed è specificato in metri al secondo. Se l’applicazione non è in grado di fornire informazioni di velocità, il valore di questo attributo deve essere nullo.

L’attributo accuratezza, in particolare, può esserci utile nel nostro software per una posizione rilevata affidabile.
Come al solito è possibile scaricare il codice da qui !
Nel prossimo articolo vedremo come integrare GoogleMap nel nostro codice.

Sergio

Sergio

Analista Programmatore: C++ - Net C# - JAVA - Python - Php - Objective C Xamarin cross plattform iOS, Android, Windows and Mac. Certificazioni [candidate ID SR2210816] - IBM Certified Business Process Analyst - IBM WebSphere Integration Developer V6.1 - IBM Certified SOA Solution Designer [2007] - IBM Lotus Notes & Domino Technical Sales Professional v2 - IBM Lotus Sametime Unified Telephony Entry Technical Sales -IBM Certified Deployment Professional - Tivoli Compliance Insight Manager V8.5 -IBM Optim Implementation for Distributed Systems (2009) Professional Test v1
Sergio