2012-05-23 6 views
5

Ich arbeite an einigen iPhone App und ich möchte eine Peilung machen, ein Bild, das zu einem bestimmten geografischen Standort, abhängig von Benutzerort mit Beschleunigungsmesser bewegen.iOS: Get Winkel zum Geolocation vom aktuellen Standort ohne Karte

Ich habe viele Antworten hier gelesen, aber keine Lösung bekommen.

Ich habe die aktuellen Standortkoordinaten und Zielorte.

Haben Sie eine Idee oder Beispielcode? Vielen Dank.

+0

See [diese] (http://stackoverflow.com/questions/6745131/how-can-we-find-the-angle-between-two-locations-defined-by-latitude-or-longitude) und [diese] (http://www.movable-type.co.uk/scripts/latlong.html) für die Referenz –

Antwort

9

auf Top definieren diese

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

Variable define in .h-Datei

float GeoAngle; 

in Ihrem Standort Delegatmethode Manager: -

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

Und die Funktion wird wie folgt : -

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

Sie erhalten ständig aktualisierte Winkel in GeoAngle Variable. , um den Pfeil zum Zielort zu drehen, nehmen Sie das Bild des Pfeils und weisen Sie es IBOutlet of arrowImageView zu und drehen Sie dies bei der Aktualisierung der Überschrift.

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

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

Danke, ich bekomme den Winkel, aber wie richtig mein Bild mit Beschleunigungsmesser zu drehen, um diese Richtung zu zeigen? Ich benutze den Winkel in dieser Methode: - (void) Beschleunigungsmesser: (UIAccelerometer *) Beschleunigungsmesser didAccelerate: (UIAcceleration *) Beschleunigung; aber es wird immer noch nicht aktualisiert, auch wenn ich das iPhone rotiere. – hafedh

+0

Wenn Sie den Pfeil auf den Zielort richten möchten, überprüfen Sie die Antwort erneut. Ich habe die Antwort bearbeitet. – Dhawal

+0

Es hat funktioniert! Vielen Dank. – hafedh