Domanda

Voglio conoscere l'azimut (Corso) di Object Distant (sulla mappa). Ho coordinate di questo oggetto lontano. Ho provato a farlo:

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

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

L'output è: loc: -1.0...

ma perché?

Voglio conoscere questo corso dalla mia direzione attuale. Ho anche l'aggiornamento della posizione con startUpdatingLocation metodo e aggiornamento delegato.

Cosa faccio di sbagliato?

Perché non posso semplicemente ottenere un corso di oggetto lontano dalla mia posizione attuale? Grazie.

È stato utile?

Soluzione

-Course restituisce la direzione di un oggetto in movimento. Quindi chiameresti un corso sulla posizione corrente degli utenti. Non ti dà una direzione dalla tua posizione in un'altra posizione. Quindi, a meno che New York non si muova, tornerà sempre -1

Se vuoi, trova l'intestazione della bussola, dovresti muoverti, puoi farlo:

#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);

Altri suggerimenti

Utilizzare il codice sotto per ottenere il corso

CLLocation *distLoc =  [[CLLocation  alloc] initWithCoordinate:loc altitude:location.altitude horizontalAccuracy:location.horizontalAccuracy verticalAccuracy:location.verticalAccuracy  course:location.course speed:location.speed timestamp:location.timestamp];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top