【问题标题】:Can the iPhone determine if you're facing north, south, east or west?iPhone 能确定你是朝北、朝南、朝东还是朝西?
【发布时间】:2009-01-05 04:18:09
【问题描述】:

iPhone 能否判断你是朝北、朝南、朝东还是朝西?

【问题讨论】:

  • 你一定要拿着它吗?
  • 真实的还是磁性的?有很大的不同。我现在的位置大约是 12.5 度。
  • 您好。我面临着完全相同的问题:我需要根据用户的位置计算真北。这个应用程序应该可以在 iphone 3G 上使用。我已经阅读了下面的答案,但不太了解。你找到解决办法了吗?

标签: iphone cocoa-touch


【解决方案1】:

如果您正在为 2.2 开发,您可能希望查看 CoreLocation 的以下新增内容:

CLLocation.course

CLLocation.speed

CLLocationDirection

CLLocationSpeed

CLLocation.course 将为您提供航向,让您可以确定北/南/东/西。

【讨论】:

  • 我了解方向和路线是相关的,并且来自 GPS 数据。只有当 GPS 检测到您正在移动时,您才能获得方向/路线。
  • 这是真的,返回的航向信息不会非常精确,并且需要速度才能工作。
  • 3GS 有一个数字罗盘。它给你磁北极。如果你打开 GPS,它也可以给你真正的北方。
【解决方案2】:

我不太确定,但这里有一些选项:

在 3-10 秒内收集两个或更多数据点。使用 GPS 绘制出运动趋向的位置。这可能是你的方向。

此外,您还可以使用加速度计来确定 iPhone 本身正在移动的方向(左、右、前、后)。将其与之前的数据配对,您可能会得到更准确的读数。

这些都不是很好,因为 GPS 并不像您希望的那样敏感,而且加速度计可能比您希望的更敏感,并且两者都依赖于运动。但它们可能会起作用。

【讨论】:

  • 这就是我恐怕不得不走的路——希望里面有一些神奇的指南针。我的黑莓 8800 有一个指南针应用程序,根据它的性能,我一直怀疑 BB 需要处于运动状态(趋势 GPS 坐标)才能确定设备的前进方向。
【解决方案3】:

iPhone 或 iPhone 3G 中没有指南针。 然而,iPhone 3GS 增加了一个数字罗盘,所以这个过程变得更容易了。

在 1 代或 3G 上,确定面的唯一方法是 stalepretzel 的建议。但请注意,只有当 GPS 有足够的锁定并且用户实际移动时,它才会起作用。您必须进行大量的平滑处理才能获得任何类型的可用数据,或许还需要指示用户在行走时保持不动。

【讨论】:

  • iPhone 3GS有指南针
  • @Erich Mirabal - 请阅读答案上的时间戳。发布时,3GS 并不存在。不过,我已经编辑了我的答案以反映这一点。
  • @Greg Beech - 非常正确,我已经更新了我的答案以反映这一点。这就是不断变化的技术所面临的问题。
  • @lc - 我很抱歉。这些东西很容易过时。但是,我想不赞成票有助于将其保留为活文件。立即 +1。
  • @Erich Mirabal - 不用担心,我不同意让这些东西保持活力是件好事。跟踪这一切非常困难。
【解决方案4】:

这可能有点小题大做,但我所做的是保持跟踪纬度/经度,然后根据该方向确定。

在返回 GPS 信息的代码中,我创建了一个代表,该代表将返回纬度和经度

[[self delegate] currentDirectionLat:newLocation.coordinate.latitude Long:newLocation.coordinate.longitude];

使用委托的代码将有一个类似的方法来获取坐标,然后在屏幕上设置一个标签来指示方向。

-(void)currentDirectionLat:(float)latitude Long:(float)longitude
{
    prevLongitude = currentLongitude;
    prevLatitude  = currentLatitude;

    currentLongitude = longitude;
    currentLatitude = latitude;

    NSString *latDirection = @"";
    if (currentLatitude > prevLatitude)
        latDirection = @"N";
    else if (currentLatitude < prevLatitude)
        latDirection = @"S";

    NSString *longDirection = @"";
    if (currentLongitude > prevLongitude)
        longDirection = @"E";
    else if (currentLongitude < prevLongitude)
        longDirection = @"W";

    if ([longDirection length] > 0)
        [lblDirection setText:[NSString stringWithFormat:@"%@%@",latDirection,longDirection]];  
}

我还没有 100% 测试过这一点,但似乎已经在我正在编写的一个应用程序上工作了。如果您想了解更多信息,请告诉我,我可以将我在上面完成的代码转发给您。

在 iPhone 开始获得经纬度变化之前,您也无法获得良好的阅读效果。然而,这并不需要太多的改变!

【讨论】:

  • 请给我一些代码,我无法从中弄清楚。假设我们有两个经纬度 ex.First 我们的位置,然后是第二个位置,然后我可以做什么?
【解决方案5】:

据我所知,iPhone 3G 中没有指南针。不幸的是,除非我遗漏了一些东西,否则我认为查看 GPS 和加速度计数据不会帮助您确定 iPhone 面向的方向 - 只有您正在行进的方向。对不起。

更新:请注意,问题和这篇文章是在 iPhone 3G 是当前型号时写的,从那时起,Apple 发布了 iPhone 3GS,其中 引入了指南针

【讨论】:

  • 有趣:我刚刚在 App Store 中搜索了 Compass,有几个应用程序可以使用当前时间和太阳的位置来计算出你面对的方向。在您移动时,至少有一个其他应用使用 GPS 来确定行进方向。
  • @Erich Mirabal - 如果您花时间阅读此答案的时间戳,您将了解到有关 3GS 的信息在 2009 年 1 月 5 日尚未公开。坦率地说,你的评论不合时宜。是的,随着 3GS 的推出,这个答案已经过时了,但它在当时是正确的,并且在很久以前也被投票赞成。
  • @lc(和 Ben)——我很抱歉。我的大脑甚至没有记录日期。不过,如果这个人不知道,只是猜测,为什么要回答?
  • Erich,在我的帖子中,我没有说“我猜到了”,根据我的知识,我很确定我的答案,尽管你的无知批评我的帖子是正确的。我认为它不应该仅仅因为我对自己不够自信而足以满足你的喜好而投反对票。
  • 本,我试图撤消否决票,但在您编辑答案之前无法撤消(系统不会让我,因为它太旧了)。这与傲慢无关,只是空谈的程度使它看起来像是一个没有答案的问题。再次,我为不该投的票感到抱歉。我仍然坚持我的观点,即您的回答是不置可否的,并且在没有添加任何技术知识的情况下感觉一厢情愿。只要您编辑它,我就可以撤消否决票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2011-05-15
  • 1970-01-01
  • 2018-08-24
相关资源
最近更新 更多