L'individuazione della posizione corrente del dispositivo è una delle funzionalità che stuzzica maggiormente la fantasia. Intorno a questa funzionalità sono nate applicazioni impensabili fino ad alcuni anni fa: dalla ricerca di ristoranti ed altri locali in zona alla previsione del tempo locale. Il servizio $cordovaGeolocation di ngCordova
ci consente di sfruttare questa funzionalità all'interno di un'applicazione Ionic. L'installazione del relativo plugin di Cordova viene effettuato tramite il seguente comando:
ionic plugin add cordova-plugin-geolocation
Per recuperare le coordinate della posizione corrente del dispositivo faremo uso del metodo getCurrentPosition()
, come possiamo vedere nel seguente esempio:
$ionicPlatform.ready(function() {
$cordovaGeolocation.getCurrentPosition()
.then(function(position) {
$scope.longitudine = position.coords.longitude;
$scope.latitudine = position.coords.latitude;
},
function(err) {
console.error("Errore nella ricerca della posizione corrente.");
});
});
Dall'esempio notiamo che la risoluzione della promise
generata da questo metodo fornisce un oggetto che contiene le coordinate della posizione corrente. Come abbiamo avuto modo di vedere per altri servizi di ngCordova
, anche in questo caso abbiamo la possibilità di passare al metodo getCurrentPosition()
un oggetto come argomento che ci consente di specificare alcune opzioni. Ad esempio, passando l'oggetto {timeout: 15000}
indichiamo che intendiamo attendere al massimo 15 secondi per la ricezione dell'informazione sulla posizione.
Watch, un evento per ogni cambio di posizione
Il metodo getCurrentPosition()
ci restituisce la posizione corrente su esplicita richiesta. In determinate circostanze vorremmo evitare di chiedere attivamente la posizione corrente anche se questa non è cambiata. A questo proposito ci viene in aiuto il metodo watchPosition()
. Esso restituisce un oggetto watch
che ci consente di catturare un evento quando cambia la posizione corrente. Il seguente esempio mostra come utilizzare il metodo watchPosition()
:
$ionicPlatform.ready(function() {
var watch = $cordovaGeolocation.watchPosition()
watch.then(null,
function(err) {
console.error("Errore nella ricerca della posizione corrente.");
},
function(position) {
$scope.longitudine = position.coords.longitude;
$scope.latitudine = position.coords.latitude;
});
});
L'oggetto restituito dal metodo watchPosition()
è una promise
che prevede una notifica ogni volta che cambia la posizione corrente. Come possiamo vedere, il primo argomento del metodo then()
è ininfluente, il secondo rappresenta la gestione della situazione d'errore mentre il terzo è il gestore dell'evento di cambio posizione.
Quando non abbiamo più bisogno del watch possiamo distruggerlo chiamanto il metodo clearWatch()
dello stesso oggetto watch
o del servizio. In altre parole, le seguenti istruzioni sono equivalenti:
watch.clearWatch();
$cordovaGeolocation.clearWatch(watch);