Scritto da Lucio Brucio Il marzo - 22 - 2011 6 Commenti

Qualche breve breve consiglio introduttivo per poter utilizzare il dispositivo di ricezione del segnale GPS presente sugli apparecchi targati Apple!  Per poter utilizzare il dispositivo GPS sull’iOS bisogna importare nella nostra applicazione il framework Core Location, per fare questo bisogna selezionare il menu “Add” e poi “Existing framework” dal menu di progetto come mostrato nell’immagine seguente:

Importare un framework esistente

Importare un framework esistente

Dall’elenco che apparirà in seguito bisogna selezionare CoreLocation.framework. Fatto questo la nostra applicazione è pronta per poter utilizzare il GPS. I dispositivo GPS comunica con la nostra applicazione attraverso gli eventi generati da iOS come la maggior parte dei dispositivi, quindi in generale per pote ricevere le coordinate geografiche bisognerà avviare il dispositivo e assegnare un “delegato” al dispositivo che risponderà a tutti gli eventi generati. Le cose da fare in pratica sono le seguenti prima di tutto dire alla nostra classe principale che dobbiamo usare il framework Core Location con il seguente import:

#import <CoreLocation/CoreLocation.h>

in questo modo possiamo accedere alle classi del framework. Per indicare all’applicazione che dovrà “ascoltare” gli eventi generati dal dispositivo GPS dobbiamo implementare l’interfaccia CLLocationManagerDelegate. La classe principale che ci permetterà di attivare il nostro dispositivo GPS è CLLocationManager quindi si dichiarerà una proprietà della classe principale:

CLLocationManager *locationManager;
@property (nonatomic, retain) CLLocationManager *locationManager;

Per inizializzare l’oggetto locationManager, dopo l’inizializzazione dell’applicazione, quindi nel metodo didFinishLaunchingWithOption, possiamo inserire il seguente codice:

if (self.locationManager == nil){
    self.locationManager = [[CLLocationManager alloc]init];
    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
    [self.locationManager setDelegate:self];
    [self.locationManager startUpdatingLocation];
}

In questo codice è stata impostata l’accuratezza del segnale di rilevamento posizione, ovviamente più è accurato e più consuma batteria, dopo di che si imposta il delegate che ascolterà gli eventi, cioè self. Come ultima riga avviamo l’aggiornamento della posizione e qua si comincia a ciucciare la batteria.

Appena la posizione corrente sarà aggiornata verrà richiamato il seguente metodo dell’interfaccia CLLocationManagerDelegate che andremo a sovrascrivere:

-(void) locationManager: (CLLocationManager *)manager didUpdateToLocation: (CLLocation *) newLocation fromLocation: (CLLocation *) oldLocation{
    [self.locationManager stopUpdatingLocation];
    NSLog(@"LOCATION: %d,%d", locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude);
}

All’interno di questo metodo prima di tutto fermiamo l’aggiornamento della posizione (che la batteria serve…) dopo di che possiamo utilizzare la posizione rilevata, in questo caso viene semplicemente loggata!

Credo che con questa brevissima introduzione si ha un minimo di base per poter utilizzare la geolocalizzazione in tutte le vostre applicazioni iOS!!!

Dovrebbe essere tutto… Ciao! :cool:

Rating 3.00 out of 5

6 commenti.

  1. avatar Massimo scrive:

    Ciao e se volessi formattarle meglio quelle coordinate invece si visualizzare il numero intero? Come si fa?

  2. avatar Massimo scrive:

    Ciao guardando in internet ho trovato questa formattazione qui che è esattamente quello che cercavo.

    NSString *coordpos=[[NSString alloc] initWithFormat:@”(%g°;%g°)”,userLocation.coordinate.longitude,userLocation.coordinate.latitude];

    Saluti e grazie comunque dell’aiuto.

  3. avatar Lucio Brucio scrive:

    Di nulla figurati.

    Ciao

  4. avatar fast scrive:

    Ciao,
    volevo chiederti se sapevi come fare per aggiungere anche la direzione alle coordinate (Es: 45,456 N)

    • avatar Lucio Brucio scrive:

      Ciao Fast, per quanto riguarda la direzione devi utilizzare la bussola, per prima cosa bisogna controllare se è disponibile con il metodo headingAvailable della classe LocationManager nel seguente modo:

      if ([self.locationManager headingAvailable]){
      /* avvia l'aggiornamento della bussola qui */
      }

      Per avviare l’aggiornamento della direzione si fa in maniera simile all’aggiornamento della posizione, bisogna utilizzare però il metodo startUpdatingHeading sempre della classe LocationManager (sempre settando self come classe delegate, vedi il post), quindi

      [self.locationManager startUpdatingHeading];

      Fatto cio appena ricevuto l’aggiornamento dalla bussola verrà invocato il metodo didUpdateHeading che dovrà essere implementato nel seguente modo:

      - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading{
      NSLog(@"Direzione ", [NSString stringWithFormat:@"Heading %.3f N", [[location course] magneticHeading]]);
      }

      All’interno del metodo stampiamo semplicemente la direzione del dispositivo. Dalla documentazione leggo che il magnetic heading è il nord magnetico e non il nord geografico. Quindi un valore 0 vuol dire che il dispositivo punta al nord magnetico, un valore di 90 vuol dire che punta a est, un valore di 180 vuol dire che punta a ovest e cosi via…

      Se serve qualche chiarimento chiedi pure!!! :D

      Ciao!


Ricevi un avviso se ci sono nuovi commenti. Oppure iscriviti senza commentare.