CLLocationManager 和 iPhone 中的航向度数

Posted

技术标签:

【中文标题】CLLocationManager 和 iPhone 中的航向度数【英文标题】:CLLocationManager and degrees of heading in iPhone 【发布时间】:2010-01-11 17:48:01 【问题描述】:

使用 CLLocationManager 对象的 didUpdateHeading 事件,如何将生成的 heading.x 和 heading.y 值转换为可以绘制到指南针图像上的度数?

【问题讨论】:

【参考方案1】:

对于航向度数,您可以使用magneticHeadingtrueHeading 属性而不是xy

真标题

相对于真北的航向(以度为单位)。 (只读)

@property(readonly, nonatomic) CLLocationDirection trueHeading

讨论

此属性中的值表示指向地理北极的航向。此属性中的值始终相对于设备顶部报告,无论设备的物理或界面方向如何。值 0 表示正北,90 表示正东,180 表示正南,依此类推。负值表示无法确定航向。

【讨论】:

【参考方案2】:

这就是我使用指南针图像旋转 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)];
        

【讨论】:

【参考方案3】:

试试:

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

   CLLocationDirection trueNorth = [newHeading trueHeading];

   CLLocationDirection magneticNorth = [newHeading magneticHeading];


CLLocationDirection 是 typedef double 类型,因此您可以得到以度数为单位的真航向或磁航向。

【讨论】:

true 不是有效的变量名。

以上是关于CLLocationManager 和 iPhone 中的航向度数的主要内容,如果未能解决你的问题,请参考以下文章

iPhone - CLLocationManager 在尝试获取当前位置时停止更新

kCLErrorDomain 错误 5:CLLocationManager 不允许我在 iPhone 7 上注册超过 10 个设备

iPhone 模拟器上的 CLLocationManager 因 kCLErrorDomain Code=0 而失败

CLLocationManager 确保 iphone 的最佳准确性

监控 CLLocationManager 重大位置更改时应用程序不会重新启动 - iPhone

我可以在 iPhone 的 CLLocationManager 中设置自定义位置吗