如何将iphone的罗盘值映射到屏幕坐标?

时间:2010-10-27 12:14:34

标签: iphone objective-c xcode

我正在做一个AR应用程序,根据具体位置的位置在cameraView中显示UILabel。当iphone指南针指向该位置时,标签显示在屏幕中央 我的问题是,当我转动iphone时,我希望这个标签向左或向右旋转。 我想有一些方法可以将指南针的度数映射到屏幕坐标,这样我就可以将标签重新绘制在屏幕的正确位置,但我无法想象如何做到这一点。 我不需要加速度计来做到这一点,我只需要将罗盘值转换为屏幕坐标。 有谁知道一些解决方案? 谢谢!

1 个答案:

答案 0 :(得分:2)

假设您的当前位置和目的地位置以CLLocationCoordinate2D表示 - 请使用以下内容获取从您的来源到目的地的角度(以弧度表示):

- (float) getHeadingForDirectionFromCoordinate:(CLLocationCoordinate2D)fromLoc toCoordinate:(CLLocationCoordinate2D)toLoc

{

    float fLat = [self angleToRadians:fromLoc.latitude];
    float fLng = [self angleToRadians:fromLoc.longitude];
    float tLat = [self angleToRadians:toLoc.latitude];
    float tLng = [self angleToRadians:toLoc.longitude];

    return atan2(sin(tLng-fLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(tLng-fLng));
}  

然后只需将当前指南针标题减去此标题(或反之亦然)并设置箭头/标记/视图标签的旋转或其他任何内容。

将此用于angleToRadians:

-(float) angleToRadians:(float) a {
    return ((a/180)*M_PI);
}