2012-05-23 10 views
5

Estoy trabajando en una aplicación de iPhone y quiero hacer un rodamiento, una imagen que se mueve a una ubicación geográfica específica, dependiendo de la ubicación del usuario usando el acelerómetro.iOS: Obtener el ángulo de la geolocalización desde la ubicación actual sin mapa

He leído muchas respuestas aquí pero no he encontrado una solución.

Tengo las coordenadas de ubicación actuales y de destino.

¿Alguna idea o código de muestra? Gracias.

+0

Ver [esto] (http://stackoverflow.com/questions/6745131/how-can-we-find-the-angle-between-two-locations-defined-by-latitude-or-longitude) y [este] (http://www.movable-type.co.uk/scripts/latlong.html) para la Referencia –

Respuesta

9

en la cima definir este

#define RadiansToDegrees(radians)(radians * 180.0/M_PI) 
#define DegreesToRadians(degrees)(degrees * M_PI/180.0) 

definen variables en el archivo .h

float GeoAngle; 

en el método delegado de su jefe de locación: -

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    GeoAngle = [self setLatLonForDistanceAndAngle:newLocation]; 
} 

Y la función será la siguiente : -

-(float)setLatLonForDistanceAndAngle:(CLLocation *)userlocation 
{ 
    float lat1 = DegreesToRadians(userlocation.coordinate.latitude); 
    float lon1 = DegreesToRadians(userlocation.coordinate.longitude); 

    float lat2 = DegreesToRadians(locLat); 
    float lon2 = DegreesToRadians(locLon); 

    float dLon = lon2 - lon1; 

    float y = sin(dLon) * cos(lat2); 
    float x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon); 
    float radiansBearing = atan2(y, x); 
    if(radiansBearing < 0.0) 
    { 
     radiansBearing += 2*M_PI; 
    } 

    return radiansBearing; 
} 

Se actualizará constantemente el ángulo en la variable GeoAngle. para rotar la flecha a la ubicación de destino tome la imagen de la flecha y asígnela a IBOutlet de arrowImageView y gírela en el método de actualización del encabezado.

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading 
{ 
    float direction = -newHeading.trueHeading; 

    arrowImageView.transform=CGAffineTransformMakeRotation((direction* M_PI/180)+ GeoAngle); 
} 
+0

¿Te permite obtener el ángulo, pero cómo rotar correctamente mi imagen usando el acelerómetro para mostrar esta dirección? Me utilizan el ángulo en este método: - acelerómetro (vacío): (UIAccelerometer *) acelerómetro didAccelerate: (UIAcceleration *) aceleración; pero todavía no se actualiza incluso giro el iPhone. – hafedh

+0

Si desea apuntar la flecha a la ubicación de destino y luego verifique la respuesta nuevamente, edité la respuesta. – Dhawal

+0

¡Funcionó! Muchas gracias. – hafedh

Cuestiones relacionadas