【发布时间】:2011-02-21 10:01:37
【问题描述】:
我有几个关于 CoreLocation 和 GPS 的问题。
首先,core location中的什么方法是用来不断获取用户当前坐标的?应该在什么时间间隔检索这些?
第二,这些坐标是不是应该每次收到都推入一个NSMutableArray,这样坐标数组就代表了用户的路径?
谢谢,只是想让我开始思考这个问题。
【问题讨论】:
标签: iphone mapkit mkmapview core-location
我有几个关于 CoreLocation 和 GPS 的问题。
首先,core location中的什么方法是用来不断获取用户当前坐标的?应该在什么时间间隔检索这些?
第二,这些坐标是不是应该每次收到都推入一个NSMutableArray,这样坐标数组就代表了用户的路径?
谢谢,只是想让我开始思考这个问题。
【问题讨论】:
标签: iphone mapkit mkmapview core-location
一个非常简略的版本:
首先,在你的.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]!
祝你找到自己好运!
【讨论】:
最好的方法是阅读CLLocationManager Class Reference,它链接到几个示例项目。简短版:
delegate 属性设置为将接收位置更新的类。CLLocationManagerDelegate 协议。【讨论】:
您可以定义准确度可接受的范围以及希望接收自动更新的频率(基于与最后一个点的距离机制)。您也可以关闭位置管理器,然后通过使用计时器随意将其重新打开。
至于保存位置来构建路径,并不是那么简单。首先,您将不断获得 GPS 位置,直到达到所需的精度,并且对于未来的任何点,在您获得良好位置之前,您可能会获得不止一个不准确的位置。因此,构建这些点的列表基本上只是他们路径的列表,以及许多额外的点。 你可以通过只保存那些具有你想要的精度的点来解决这个问题,但在这方面它是一个不完美的世界。
最好的情况是我建议您保留两个列表,一个是路径,另一个是您正在比较的位置的运行列表,直到您获得高度准确的位置,然后将其放在您的路径列表中。 一些示例项目按照这些方式做事,请检查一下。
【讨论】:
您必须执行以下操作:
【讨论】: