CLLocationManager返回错误的位置

时间:2017-01-11 16:07:30

标签: ios objective-c cllocationmanager

我使用CLLocationManager来检测当前用户位置。那是我的代码:

- (void)viewDidLoad {
    locationManager = [[CLLocationManager alloc] init];
    locationManager.distanceFilter = kCLDistanceFilterNone;
    locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
    locationManager.delegate = self;
    if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        [locationManager requestWhenInUseAuthorization];
    }
    [locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {

    curLocation = [locations lastObject];
    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude: curLocation.coordinate.latitude longitude: curLocation.coordinate.longitude zoom:currentZoom];
    [mapView animateToCameraPosition:camera];    

}

现在我正面临着奇怪的行为。我坐在办公室里,旁边还有我的设备,但是CLLocationManager认为我在我周围+/- 1414.0米范围内随机移动,速度= -1,航线= -1 。我可以通过这些恒定的速度和过程来过滤所有这些“错误的动作”,但我不明白为什么它会像这样工作。任何想法都很受欢迎。

1 个答案:

答案 0 :(得分:3)

假设"在+/- 1414.0m范围内随机移动"意味着"位置读数显示水平精度设置为1414.0":

您的设备无法获取GPS定位。这可能是因为办公楼内没有GPS。此外,您可能已关闭WiFi,因为WiFi上应该可以获得更好的水平精度 - 最高+/- 65米。

请记住,有3个位置读数来源:

  • cell tower
  • wifi接入点
  • GPS

当电池塔是唯一的光源时,通常会得到+/- 1414m

使用WiFi接入点,您可以获得高达65米的准确度 - 请注意,对于wifi三角测量工作,您需要a)启用WiFi无线电 - 扫描接入点,以及b)访问Apple接入点数据库 - 解析接入点到纬度/长度。如果存在瞬态连接或数据库服务器问题,您将无法使用WiFi AP三角测量。

当通过GPS获取位置读数时,您开始看到非负速度。

缩短它 - 可能你只需要离开办公室:o)