2012-05-23 5 views
5

Pracuję nad pewną aplikacją na iPhone'a i chcę utworzyć obraz, który przenosi się do określonej lokalizacji geograficznej, w zależności od lokalizacji użytkownika za pomocą akcelerometru.iOS: Uzyskaj kąt do położenia geograficznego z bieżącej lokalizacji bez mapy

Przeczytałem wiele odpowiedzi tutaj, ale nie otrzymałem rozwiązania.

Mam aktualne współrzędne lokalizacji i docelowe.

Masz jakiś pomysł lub przykładowy kod? Dzięki.

+0

patrz [to], (http://stackoverflow.com/questions/6745131/how-can-we-find-the-angle-between-two-locations-defined-by-latitude-or-longitude) i [this] (http://www.movable-type.co.uk/scripts/latlong.html) dla Reference –

Odpowiedz

9

na początku zdefiniować ten

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

Definiuj w .h pliku

float GeoAngle; 

w metodzie delegata Twojego lokalizacjami za: -

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

a funkcja będzie następująca : -

-(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; 
} 

Otrzymasz stale aktualizowany kąt w zmiennej GeoAngle. , aby obrócić strzałkę do miejsca docelowego, wykonaj zdjęcie strzałki i przypisz ją do IBOutlet strzałkiImageView i obróć tę metodę aktualizacji nagłówka.

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

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

Żeby uzyskać kąt, ale jak poprawnie obrócić obraz za pomocą akcelerometru, aby pokazać ten kierunek? Używam kąt w tej metodzie: - (void) akcelerometr: (UIAccelerometer *) akcelerometr didAccelerate: (UIAcceleration *) przyspieszenie; ale wciąż nie aktualizuje się nawet I obrócić iPhone. – hafedh

+0

Aby wskazać strzałkę w miejscu docelowym, a następnie ponownie sprawdzić odpowiedź, edytowałem odpowiedź. – Dhawal

+0

Zadziałało! Dziękuję Ci bardzo. – hafedh

Powiązane problemy