2009-07-07 3 views
1

J'ai un problème ce que je suppose est plutôt trivial ... J'ai codé une application en utilisant le mapkit et ai fait le développement sur mon Mac en utilisant le simulateur qui n'a pas de GPS. J'ai donc codé en dur les coordonnées pour simuler une position d'utilisateur. Aujourd'hui, lorsque j'ai essayé mon application sur mon iPhone pour la première fois, j'ai pensé que je devais seulement modifier un peu mon code pour pouvoir lire les coordonnées du GPS et obtenir les informations sur la position des utilisateurs. Mais ça n'a pas marché aussi facilement. Est-ce que quelqu'un a une idée de comment résoudre ce problème? J'ai besoin de la longitude et la latitude de l'utilisateur pour calculer la distance à une autre position et j'ai pensé que je pourrais faire quelque chose comme ceci ...?Problème avec la lecture de l'emplacement de l'utilisateur dans les coordonnées sur iPhone

CLLocationManager *clm = [[CLLocationManager alloc]init];
[clm.delegate self]; [clm startUpdatingLocation];


userLocationFromGPS = clm.location.coordinate;
//the userLocationFromGPS is a CLLocationCoordinate2D userLocationFromGPS object

user = [[Annotations alloc]initWithCoordinate:userLocationFromGPS];
[user setTheTitle:@"You are here!"];

userLocationPlain =
[[CLLocation alloc]initWithLatitude:userLocationFromGPS.latitude longitude:userLocationFromGPS.longitude];

J'ai besoin des coordonnées, mais ne peux pas comprendre comment les obtenir ... des idées? Merci d'avance!

Répondre

2

CLLocationManager indique l'emplacement de façon asynchrone, vous devez donc fournir un délégué.
Envisager d'aller sur LocateMe exemple de code. En outre, vous devez coder en dur les coordonnées dans le simulateur. Le simulateur utiliserait les coordonnées du siège d'Apple.

Voici quelques refactoring pour le code que vous avez fourni (je ne l'ont pas fait): prenez en considération les éléments suivants:


    CLLocationManager *clm = [[CLLocationManager alloc] init]; 
    clm.delegate = self; 
    [clm startUpdatingLocation]; 

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 

    Annotations *user = [[Annotations alloc] initWithCoordinate:newLocation]; 
    [user setTheTitle:@"You are here!"]; 

    CLLocation *userLocationPlain = 
    [[CLLocation alloc] initWithLatitude:newLocation.latitude 
         longitude:newLocation.longitude]; 

    // At some point you should call [manager stopUpdatingLocation] 
    // and release it 
} 
0

Comme this dit, vous devrez peut-être d'abord importer le cadre de l'emplacement.

0

Merci à vous deux d'avoir répondu!

msaeed: Votre code présente bien. J'ai défini un délégué mais j'ai oublié d'implémenter la méthode comme vous le faites dans votre exemple. Je vais l'essayer! Merci!

mcandre: Oui, j'ai ajouté le cadre et j'utilise les fonctionnalités dans d'autres méthodes dans mon application, lors de la lecture et la manipulation de position à partir d'un fichier KML.

/MACloop

+1

Super! À l'avenir, pensez à laisser des commentaires au lieu d'ajouter une «réponse». – notnoop

+0

Ah - oui! Je ne savais pas à propos de cette fonctionnalité ;-) Merci encore! –

Questions connexes