2010-05-19 71 views
2

我有几个关于CoreLocation和GPS的问题。iPhone SDK:使用GPS跟踪用户位置

首先,核心位置中的哪个方法用于持续获取用户当前坐标?在什么时间间隔应该检索?

其次,应该将这些坐标来每次被接收到的时间推入的NSMutableArray,使坐标的阵列将代表用户路径?

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

回答

11

一个非常简化版本:

首先,采用<CLLocationManagerDelegate>协议在您的.h和#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); 
} 

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation方法会ping通每个核心位置有话要说给你,这应该每隔几秒钟发生的时间。这些CLLocation对象包含有关准确性的信息,因此您可以在该方法中筛选出好的点。

一定要打电话[locationManager stopUpdatingLocation]然后[locationManager release]在某个时刻!

祝你好运!

+0

我可能是错的,应该:的NSLog(@ “%F%F,%@”,here.latitude,here.longitude);不是:NSLog(@“%f%f”,here.latitude,here.longitude); – fuzzygoat 2010-05-20 14:11:11

+0

哦,绝对正确。这会给你一个BAD_ACCESS错误。纠正。 – 2010-05-21 12:32:07

+0

即使应用程序已最小化,更新位置报价器是否也能正常工作? – kmehta 2011-06-14 14:57:46

1

您可以定义什么范围是可接受的准确性,以及您希望接收自动更新的频率(基于距离最后一点机制的距离)。您也可以关闭位置管理器,并随时通过定时器的使用将其恢复。

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

我会建议你把两个列表最好的情况,一个是路径,另一个是的,你是在比较,直到你得到一个高度精确的位置,然后把你的路径列表上的位置运行列表。 一些示例项目沿着这些方向行事,请检查它们。

1

你必须做到以下几点:

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

忘掉1.如果你没有互联网,你将无法获得设备的坐标。至少不是没有用户按下“发送”。没有用户交互,iOS不允许发送短信。 – 2012-09-29 22:58:46