1

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

现在我已经实现了 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 获取位置。

知道如何实现吗?

提前致谢。

4

1 回答 1

3

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;
        }
    }
    
于 2013-06-24T07:42:23.717 回答