【问题标题】:Angle to Mecca from current location with iPhone compass使用 iPhone 指南针从当前位置到麦加的角度
【发布时间】:2012-03-19 07:26:53
【问题描述】:

我有一个关于 Qibla 方向的问题,我正在构建一个 iPhone 应用程序,它将同时显示北向和 Qibla 方向,我在 CLLocationManager 的帮助下显示北向,并将 CLHeading 更新为 newHeading.magneticHeading,并且我用以下代码显示朝拜方向

double A = MECCA_LONGITUDE - lon;
double b = 90.0 - lat;
double c = 90.0 - MECCA_LATITUDE;
NSLog(@"tan -1( sin(%f) / ( sin(%f) * cot(%f) - cos(%f) * cos(%f)))", A, b, c, b, A);
double qibAngle =  atan(sin(A) /( sin(b) * (1 / tan(c)) - cos(b) * cos(A) ));
NSLog(@"qib Angle- %f",qibAngle);
qibla.transform = CGAffineTransformMakeRotation(qibAngle * M_PI /180);

所以,我在这里得到了角度,但是当我旋转设备时它不会更新角度,谁能帮助我,我知道我需要对航向做一些事情,但我不知道是什么做什么?

【问题讨论】:

标签: iphone ios ios4


【解决方案1】:

我假设您发布的代码计算了当前位置的地理北方与朝向麦加的方向之间的角度。您现在需要做的就是考虑用户的标题。

例如,假设用户位于麦加正西,用户正对正东。由于tan 返回 +/-90 度,因此朝拜角度必须为 -90 度。现在调整应该很明显了:您需要从相对于地理北 (-90) 的朝拜角度减去 90 度以达到 (-180) 度,这就是用户需要转动多少度才能面对麦加。

简单地说,您需要“撤消”用户的偏差,您可以通过从 qibla 角度减去用户的朝向(相对于地理北方)来做到这一点。

解决了数学问题,现在您需要观察航向变化并在航向变化时重新计算朝拜角度。最后,确保使用trueHeading 属性。

【讨论】:

  • 谢谢,我已经减去 (-90) 你能帮我看看如何更新我的朝拜角度 wrt 真正的标题,你能发布任何代码吗?
  • 你为什么要减去-90?您应该阅读我的回答并尝试理解它,而不是盲目地应用我所说的。
【解决方案2】:

我可能会在这个答案上失分,因为我对 ios 一无所知,但是,我相信 atan returns a value in radiansCGAffineTransformMakeRotation takes it's argument in radians as well ,因此不需要转换 qibAngle * M_PI /180

您可能还想重新命名您的帖子,因为大多数人不知道 Qibla 是什么,也不会意识到它是关于数学和 iOS 的。我只是看,因为我听说计算到麦加的正确方向是一个巧妙的数学问题。

【讨论】:

  • 感谢您的回复,我已经删除了 * M_PI /180 ,但是当我旋转我的设备时它仍然没有旋转,你能帮我看看如何根据航向更新角度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 2011-07-02
  • 2016-05-15
  • 2013-10-05
  • 2011-07-29
  • 1970-01-01
相关资源
最近更新 更多