8

I want to show an arrow image on GMSMapView(i am using google maps sdk). Now if i am driving(arrow is showing my current location) and i have to take left turn then i have to change bearing of mapView. But i have no idea how to do this.

I am trying to change bearing in didUpdateHeading

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading{
if(newHeading.headingAccuracy>0)
{

    float heading = newHeading.magneticHeading; //in degrees
     //heading = (heading*M_PI/180);
    //NSLog(@"heading=%f", heading);
    [mapView animateToBearing:heading];
}}

headingFilter is set to 12.

I have also tried trueHeading, but magneticHeading is giving better results not accurate though.
Please help.

Virat Naithani
  • 783
  • 12
  • 31
  • have you tried `[Your CLLocationManager instance].desiredAccuracy = kCLLocationAccuracyBestForNavigation` ? – Hani Ibrahim Dec 06 '13 at 07:56
  • yes, locationManager.distanceFilter = kCLDistanceFilterNone; locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; – Virat Naithani Dec 06 '13 at 07:59

1 Answers1

5

You don't actually need to convert anything to degrees. The newHeading object you get from your delegate method should be enough. The GMS-reference for the animateToBearing: requires a CLLocationDirection as a parameter. The newHeading.magneticHeading or newHeading.trueHeading provided by the delegate method is an object of this type. Also: you're converting the newHeading to a float, where as a CLLocationDirection is a double, so the GMS-function will also require a double. See reference.

Konstantin Salavatov
  • 4,370
  • 2
  • 25
  • 24
Martijn
  • 460
  • 4
  • 16