Question

Je veux connaître l'azimut (cours) d'un objet distant (sur la carte). J'ai des coordonnées de cet objet distant. J'ai essayé de faire ceci:

CLLocation *distLoc = [CLLocation alloc] initWithLatitude:40.725405 
                                                longitude:-74.003906]; // NY city

NSLog(@"loc: %f", distLoc.course);

La sortie est: loc: -1.0...

mais pourquoi?

Je veux connaître ce cours de ma direction actuelle. J'ai aussi la mise à jour de l'emplacement avec startUpdatingLocation Méthode et mise à jour délégués.

Ce que je fais mal?

Pourquoi je ne peux pas simplement obtenir un objet distant de ma position actuelle? Merci.

Était-ce utile?

La solution

-Cours renvoie la direction d'un objet en mouvement. Vous appelez donc -Course sur vos utilisateurs. Cela ne vous donne pas une direction de votre emplacement à un autre endroit. Donc, à moins que NYC ne bouge, il reviendra toujours -1

Si vous voulez trouver le cap de la boussole, vous devriez bouger, vous pouvez le faire:

#define RAD_TO_DEG(r) ((r) * (180 / M_PI))

...    

CLLocationCoordinate2D coord1 = currentLocation.coordinate;
CLLocationCoordinate2D coord2 = distLoc.coordinate;

CLLocationDegrees deltaLong = coord2.longitude - coord1.longitude;
CLLocationDegrees yComponent = sin(deltaLong) * cos(coord2.latitude);
CLLocationDegrees xComponent = (cos(coord1.latitude) * sin(coord2.latitude)) - (sin(coord1.latitude) * cos(coord2.latitude) * cos(deltaLong));

CLLocationDegrees radians = atan2(yComponent, xComponent);
CLLocationDegrees degrees = RAD_TO_DEG(radians) + 360;

CLLocationDirection heading = fmod(degrees, 360);

Autres conseils

Utilisez le code ci-dessous pour obtenir le cours

CLLocation *distLoc =  [[CLLocation  alloc] initWithCoordinate:loc altitude:location.altitude horizontalAccuracy:location.horizontalAccuracy verticalAccuracy:location.verticalAccuracy  course:location.course speed:location.speed timestamp:location.timestamp];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top