CLLocationManager и градусы курса в iPhone

Используя событие didUpdateHeading объекта CLLocationManager, как мне преобразовать полученные значения heading.x и heading.y в градусы, которые я могу нанести на изображение компаса?


person Ian Vink    schedule 11.01.2010    source источник


Ответы (3)


Для степеней заголовков вы можете использовать magneticHeading и trueHeading вместо x и y.

истинный заголовок

Направление (измеряется в градусах) относительно истинного севера. (только для чтения)

@property(readonly, nonatomic) CLLocationDirection trueHeading

Обсуждение

Значение этого свойства представляет собой направление, указывающее на географический Северный полюс. Значение этого свойства всегда сообщается относительно верхней части устройства, независимо от физической или интерфейсной ориентации устройства. Значение 0 представляет истинный север, 90 — восток, 180 — юг и т. д. Отрицательное значение указывает, что заголовок не может быть определен.

person notnoop    schedule 11.01.2010

Вот как я повернул uiimageview с изображением компаса. Северная стрелка изначально была направлена ​​вверх на изображении.

if (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
            NSLog(@"UIInterfaceOrientationLandscapeLeft");
            [self.compassImageViewIphone setTransform:CGAffineTransformMakeRotation((((newHeading.magneticHeading - 90) *3.14/180)*-1) )];

        }else if (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight){
            NSLog(@"UIInterfaceOrientationLandscapeRight");
            [self.compassImageViewIphone setTransform:CGAffineTransformMakeRotation((((newHeading.magneticHeading + 90) *3.14/180)*-1))];

        }else if (self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
            NSLog(@"UIInterfaceOrientationPortraitUpsideDown");
            [self.compassImageViewIphone setTransform:CGAffineTransformMakeRotation((((newHeading.magneticHeading + 180) *3.14/180)*-1) )];

        }else{
            NSLog(@"Portrait");
            [self.compassImageViewIphone setTransform:CGAffineTransformMakeRotation((newHeading.magneticHeading *3.14/180)*-1)];
        }
person RomeoF    schedule 12.05.2012

Пытаться:

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {

   CLLocationDirection trueNorth = [newHeading trueHeading];

   CLLocationDirection magneticNorth = [newHeading magneticHeading];

}

CLLocationDirection имеет typedef double, поэтому вы получаете истинный или магнитный курс в градусах.

person James    schedule 11.01.2010
comment
true не является допустимым именем переменной. - person Ryan Copley; 26.08.2014