【问题标题】:iPhone SDK: Track users location using GPSiPhone SDK:使用 GPS 跟踪用户位置
【发布时间】:2011-02-21 10:01:37
【问题描述】:

我有几个关于 CoreLocation 和 GPS 的问题。

首先,core location中的什么方法是用来不断获取用户当前坐标的?应该在什么时间间隔检索这些?

第二,这些坐标是不是应该每次收到都推入一个NSMutableArray,这样坐标数组就代表了用户的路径?

谢谢,只是想让我开始思考这个问题。

【问题讨论】:

    标签: iphone mapkit mkmapview core-location


    【解决方案1】:

    一个非常简略的版本:

    首先,在你的.h中采用<CLLocationManagerDelegate>协议,#import <CoreLocation/CoreLocation.h>

    然后在 .m 中去:

    - (void)viewDidLoad {
        locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
        locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        [locationManager startUpdatingLocation];
    }
    
    
    -(void)locationManager:(CLLocationManager *)manager
       didUpdateToLocation:(CLLocation *)newLocation
              fromLocation:(CLLocation *)oldLocation
    {
        CLLocationCoordinate2D here =  newLocation.coordinate;
        NSLog(@"%f  %f ", here.latitude, here.longitude);
    }
    

    每次 Core Location 有话要对您说时,您的 -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 方法都会被 ping 通,这应该每隔几秒钟发生一次。这些 CLLocation 对象包含有关准确性的信息,因此您可以筛选该方法中的优点。

    请务必致电[locationManager stopUpdatingLocation],然后在某个时候致电[locationManager release]

    祝你找到自己好运!

    【讨论】:

    • 我可能错了,应该: NSLog(@"%f ​​%f, %@ ", here.latitude, here.longitude);不是:NSLog(@"%f ​​%f", here.latitude, here.longitude);
    • 哦,完全正确。这会给你一个 BAD_ACCESS 错误。已更正。
    • 即使应用程序最小化,更新位置记录器也能正常工作吗?
    • @kmehta - 要在应用程序后台运行时使用此功能,您需要将 info.plist 键“UIBackgroundModes”设置为“位置”。但是,如果您这样做,您应该预计电池寿命会受到非常严重的影响!
    【解决方案2】:

    最好的方法是阅读CLLocationManager Class Reference,它链接到几个示例项目。简短版:

    1. delegate 属性设置为将接收位置更新的类。
    2. 在委托中实现CLLocationManagerDelegate 协议。
    3. 调用适当的方法开始更新位置和/或航向。

    【讨论】:

      【解决方案3】:

      您可以定义准确度可接受的范围以及希望接收自动更新的频率(基于与最后一个点的距离机制)。您也可以关闭位置管理器,然后通过使用计时器随意将其重新打开。

      至于保存位置来构建路径,并不是那么简单。首先,您将不断获得 GPS 位置,直到达到所需的精度,并且对于未来的任何点,在您获得良好位置之前,您可能会获得不止一个不准确的位置。因此,构建这些点的列表基本上只是他们路径的列表,以及许多额外的点。 你可以通过只保存那些具有你想要的精度的点来解决这个问题,但在这方面它是一个不完美的世界。

      最好的情况是我建议您保留两个列表,一个是路径,另一个是您正在比较的位置的运行列表,直到您获得高度准确的位置,然后将其放在您的路径列表中。 一些示例项目按照这些方式做事,请检查一下。

      【讨论】:

        【解决方案4】:

        您必须执行以下操作:

        1. 如果设备无法访问互联网
          1. 从 GPS 设备获取坐标
          2. 通过短信发送这些坐标
          3. 在您必须配置为从设备接收信息的 SMS 网关上接收和解码 SMS 消息。
          4. 更新应用程序数据库或您正在使用的任何其他商店的信息
          5. 使用最新信息更新地图上的位置
        2. 如果设备可以访问互联网
          1. 从 GPS 设备获取坐标
          2. 连接到应用服务器(可能是一些服务)并上传信息
          3. 更新应用程序数据库或您正在使用的任何其他商店的信息
          4. 使用最新信息更新地图上的位置

        【讨论】:

        • 忘记 1. 如果您没有互联网,您将无法从设备中获取坐标。至少在没有用户按下“发送”的情况下是这样。 iOS 不允许在没有用户交互的情况下发送短信。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多