Pregunta

Quiero saber acimut (curso) de objeto distante (en el mapa). Tengo coordenadas de este objeto distante. Traté de hacer esto:

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

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

La salida es: loc: -1.0...

¿pero por qué?

Quiero saber este curso desde mi dirección actual. También tengo actualización de ubicación con startUpdatingLocation Método y actualización de delegado.

¿Qué hice mal?

¿Por qué no puedo simplemente obtener un curso de objeto distante desde mi posición actual? Gracias.

¿Fue útil?

Solución

-Creurse Devuelve la dirección de un objeto en movimiento. Por lo tanto, llamaría curso en la ubicación actual de sus usuarios. No le da una dirección desde su ubicación a otra ubicación. Entonces, a menos que NYC se mueva, siempre volverá -1

Si desea encontrar el encabezado de la brújula, debe moverse, puede hacer esto:

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

Otros consejos

Use el código a continuación para obtener el curso

CLLocation *distLoc =  [[CLLocation  alloc] initWithCoordinate:loc altitude:location.altitude horizontalAccuracy:location.horizontalAccuracy verticalAccuracy:location.verticalAccuracy  course:location.course speed:location.speed timestamp:location.timestamp];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top