Obtener las coordenadas GPS del iPhone con CoreLocation (parte 1)

mislata

Mislata
Bien, en el tutorial de hoy quieremos hacer una pequeña introducción a la librería CoreLocation, que es la que permite obtener las coordenadas GPS de nuestro iPhone.

Introducción
La librería Core Location funciona por eventos. Esto quiere decir que el teléfono manda un evento “update” cuando Core Location esta en marcha y una nueva posición esta disponible. Para usar Core Location, hay que configurar la aplicación para interceptar estos eventos.
Nuestra aplicación configurará donde se mandan estos eventos creando una instancia de la clase CLLocationManager, y asignadole un CLLocationManagerDelegate (clase que intercepta los updates). Bien, empezemos.

Crear un controlador de la clase Core Location
Lo primero que tenemos que hacer es añadir el framework necesario para tener acceso a las clases. Por tanto botón derecho en la carpeta “frameworks” de nuestro proyecto>Add>Existing framwork y buscamos CoreLocation.framework>Add.

Bien, ahora añadimos una nueva clase a nuestro proyecto, del tipo NSObject y le llamamos MyCLController. Modificar-la para que quede así:

MyCLController.h

Código:
01
...
02
#import <CoreLocation/CoreLocation.h>
03
 
04
interface MyCLController : NSObject <CLLocationManagerDelegate> {
05
    CLLocationManager *locationManager;
06
}
07
 
08
property (nonatomic, retain) CLLocationManager *locationManager; 
09
 
10
- (void)locationManager:(CLLocationManager *)manager
11
    didUpdateToLocation:(CLLocation *)newLocation
12
           fromLocation:(CLLocation *)oldLocation;
13
 
14
- (void)locationManager:(CLLocationManager *)manager
15
       didFailWithError:(NSError *)error;
16
 
17
end

MyCLController.m
Código:
01
#import "MyCLController.h"
02
 
03
implementation MyCLController
04
 
05
synthesize locationManager;
06
 
07
- (id) init {
08
    self = [super init];
09
    if (self != nil) {
10
        self.locationManager = [[[CLLocationManager alloc] init] autorelease];
11
        self.locationManager.delegate = self; // send loc updates to myself
12
    }
13
    return self;
14
}
15
 
16
- (void)locationManager:(CLLocationManager *)manager
17
    didUpdateToLocation:(CLLocation *)newLocation
18
           fromLocation:(CLLocation *)oldLocation
19
{
20
    NSLog("Location: %", [newLocation description]);
21
}
22
 
23
- (void)locationManager:(CLLocationManager *)manager
24
           didFailWithError:(NSError *)error
25
{
26
    NSLog("Error: %", [error description]);
27
}
28
 
29
- (void)dealloc {
30
    [self.locationManager release];
31
    [super dealloc];
32
}
33
 
34
end

Bien, con esto ya tenemos una clase capaz de recibir los eventos que explicabamos en la introducción.

Ahora tenemos que usar esta clase en nuestro controlador de vista donde queramos mostrar la ubicación actual.

Usando la clase MyCLController:
MyViewController.h
Código:
1
#import...
2
#import "MyCLController.h"
3
 
4
interface MyViewController : UIViewController {
5
    MyCLController *locationController;
6
}
7
 
8
end

MyViewController.m

Código:
01
#import "MyViewController.h"
02
 
03
implementation MyViewController
04
 
05
- (void)viewDidLoad {
06
    //inicializamos la clase
07
    locationController = [[MyCLController alloc] init];
08
    //le decimos que empieza a recibir los updates
09
    [locationController.locationManager startUpdatingLocation];
10
}
11
 
12
- (void)didReceiveMemoryWarning {
13
    [super didReceiveMemoryWarning];
14
}
15
 
16
- (void)dealloc {
17
    [locationController release];
18
    [super dealloc];
19
}
20
end

Bien, ahora ya podéis iniciar la aplicación, si todo va bien deberías ver en la consola la posición actual. Tener en cuenta que cuando usamos Core Location es mejor probarlo desde el dispositivo puesto que el simulador tiene una ubicación predeterminada y simpre muestra la misma.

Espero que os sirva de ayuda este tutorial para iniciaros con Core Location y la localización GPS.
 
Arriba