iPhone SDK:使用GPS跟踪用户位置

时间:2010-05-19 14:15:31

标签: iphone mapkit mkmapview core-location

我有一些关于CoreLocation和GPS的问题。

首先,核心位置使用哪种方法来持续获取用户当前坐标?是什么时候应该检索这些?

其次,每次收到这些坐标时是否应将这些坐标推入NSMutableArray,以便坐标数组代表用户路径?

谢谢,只是想开始让我介意一下。

4 个答案:

答案 0 :(得分:11)

非常简短的版本:

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

然后在.m go:

- (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方法都会被识别,这应该每隔几秒发生一次。这些CLLocation对象包含有关准确性的信息,因此您可以在该方法中筛选好点。

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

祝你好运!

答案 1 :(得分:1)

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

  1. delegate属性设置为将接收位置更新的类。
  2. 在代理中实施CLLocationManagerDelegate协议。
  3. 调用适当的方法以开始更新位置和/或标题。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

您必须执行以下操作:

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