使用iPhone GPS更新用户位置,无需上网

即使没有可用的互联网,我也需要获取用户位置并获取经度和纬度。

现在我已经实现了CoreLocation方法: –

-(void)updatestart { // Current location _locationManager = [[CLLocationManager alloc]init]; _locationManager.desiredAccuracy = kCLLocationAccuracyBest; _locationManager.delegate = self; [_locationManager startUpdatingLocation]; } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"didFailWithError: %@", error); UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [errorAlert show]; } - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ [_locationManager stopUpdatingLocation]; NSLog(@"%f",_locationManager.location.coordinate.latitude); NSLog(@"%f",_locationManager.location.coordinate.longitude); } 

我正在获取位置更新,但这仅在我们有互联网连接时才有效。

我想使用iPhone GPS即使没有互联网我们也可以获取位置。

知道怎么实现那个??

提前致谢。

GPS不需要使用互联网进行数据交换,但它基本上有两个缺点:

  1. 如果你最近没有使用它,需要很长时间才能获得位置(这是由于卫星搜索)
  2. 它不适用于建筑物内部或建筑物之间的街道太小(这在意大利发生了很多)

另一种不需要数据交换的方式是基于蜂窝塔的位置,但当然您的设备应该安装蜂窝芯片。

从你的代码中我看到了应该尽快修复的三件事。

  • 有时第一个位置是缓存的,它不代表实际位置
  • 最好在收到有效坐标时停止位置管理器,这意味着:没有缓存,水平精度> = 0且水平精度符合您的要求,
  • 不推荐使用获取位置的委托方法(具体取决于您的部署目标)。 以下是前两点的小片段:

     -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ CLLocation * newLocation = [locations lastObject]; if (newLocation.horizontalAccuracy < 0) { return; } NSTimeInterval interval = [newLocation.timestamp timeIntervalSinceNow]; if (abs(interval)>20) { return; } }