iPhone可以确定您是面向北,南,东还是西?

时间:2009-01-05 04:18:10

标签: iphone cocoa-touch

iPhone可以确定您是面向北,南,东还是西?

5 个答案:

答案 0 :(得分:7)

如果您正在开发2.2,您可能需要查看以下对CoreLocation的补充:

CLLocation.course

CLLocation.speed

CLLocationDirection

CLLocationSpeed

CLLocation.course将为您提供标题,以便您确定北/南/东/西。

答案 1 :(得分:2)

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

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

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

这些并不是很好,因为GPS并不像你想的那么灵敏,加速度计可能比你想要的更灵敏,而且都依赖于运动。但他们可能会工作。

答案 2 :(得分:2)

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

在第一代或3G上,确定面临的唯一方法是stalepretzel的建议。但请注意,只有当GPS具有足够的锁定且用户实际移动时,它才会起作用。您必须进行大量平滑才能获得任何类型的可用数据,可能还会向用户提供指示以便在行走时保持静止。

答案 3 :(得分:0)

这可能有点像黑客,但我正在做的是跟踪纬度/经度,然后确定方向。

在我的代码中,我返回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开始转变并进行长期更改之前,您也无法获得良好的阅读效果。但是,要改变它并不需要太多!

答案 4 :(得分:-1)

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

更新:请注意,问题和这篇文章是在iPhone 3G成为当前型号的时候编写的,从那时起Apple发布了 iPhone 3GS ,其中推出了罗盘