web-dev-qa-db-fra.com

Comment trouver votre position actuelle avec CoreLocation

J'ai besoin de trouver mon emplacement actuel avec CoreLocation, j'ai essayé plusieurs méthodes mais jusqu'à présent, mon CLLocationManager n'a renvoyé que des 0 .. (0.000.00.000).

Voici mon code (mis à jour pour fonctionner):

Importations :

#import <CoreLocation/CoreLocation.h>

Déclaré :

IBOutlet CLLocationManager *locationManager;
IBOutlet UILabel *latLabel;
IBOutlet UILabel *longLabel;

Fonctions :

- (void)getLocation { //Called when needed
    latLabel.text  = [NSString stringWithFormat:@"%f", locationManager.location.coordinate.latitude]; 
    longLabel.text = [NSString stringWithFormat:@"%f", locationManager.location.coordinate.longitude];
}

- (void)viewDidLoad {
    locationManager = [[CLLocationManager alloc] init];
    locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
    [locationManager startUpdatingLocation];
}
34
Aleksander Azizi

Vous pouvez trouver votre position en utilisant CoreLocation comme ceci:

importer CoreLocation:

#import <CoreLocation/CoreLocation.h>

Déclarez CLLocationManager:

CLLocationManager *locationManager;

Initialisez le locationManager dans viewDidLoad et créez une fonction qui peut return l'emplacement actuel en tant que NSString:

- (NSString *)deviceLocation {
    return [NSString stringWithFormat:@"latitude: %f longitude: %f", locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude];
}

- (void)viewDidLoad
{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
    [locationManager startUpdatingLocation];
}

Et l'appel de la fonction deviceLocation renverra l'emplacement comme prévu:

NSLog(@"%@", [self deviceLocation]);

C'est juste un exemple. Initialiser CLLocationManager sans que l'utilisateur ne soit prêt pour cela n'est pas une bonne idée. Et, bien sûr, locationManager.location.coordinate peut être utilisé pour obtenir latitude et longitude à volonté après l'initialisation de CLLocationManager.

N'oubliez pas d'ajouter le CoreLocation.framework dans les paramètres de votre projet sous l'onglet Générer des phases (Targets->Build Phases->Link Binary).

77
Aleksander Azizi

Avec CLLocationManager, vous n'avez pas besoin d'obtenir immédiatement les informations de localisation. Le GPS et les autres appareils qui obtiennent des informations de localisation peuvent ne pas être initialisés. Ils peuvent prendre un certain temps avant d'avoir des informations. Au lieu de cela, vous devez créer un objet délégué qui répond à locationManager:didUpdateToLocation:fromLocation:, puis définissez-le comme délégué du gestionnaire d'emplacement.

voir ici

15
ThomasW