初始起始位置并不总是从零开始

时间:2013-11-18 22:14:40

标签: ios core-location cllocationmanager cllocation cllocationdistance

当我第一次开始更新位置时,该值始终不为0。有时它是,但有时我得到略高于0的值。我会得到一个像2这样的值。所以粗略我点击停止并再次开始然后生病得到一个较小的值并继续这样做直到我得到零。即使我想要的距离滤波器是250米,但在下面开始时会得到值!为什么会发生这种情况以及如何处理这个问题。以下内容开始时尤其是一个问题(让我知道这是一些G-P-S初始建立问题)。我可以通过一个简单的警报视图来处理这个问题,以确认用户在开始之前是在户外,但有时在外面时会发生这种情况,所以我想要解决这个问此外,当它从0开始并且我立即开始驾驶时,我得到的值不准确。好像我必须在开始驾驶之前等待30秒才能获得准确的读数。

我的解决方案:需要确认一些如何在地点更新开始之前进行固体G-P-S连接。

在CLLocationManager类引用中看不到任何对上述解决方案有帮助的内容。

CLLocationManager class reference

下面是一个关于启动和停止的意思的例子,当它没有从0开始时。

Trigger Start - > Location = 1.1 km
Trigger Stop
Trigger Start - > Location = .98 km
Trigger Stop
Trigger Start - > Location = .55 km
Trigger Stop
Trigger Start - > Location = .02 km
Trigger Stop
Trigger Start - > Location = 0 km (finally where it should start from)

这是我的代码:

@interface DriveLog (){

    CLLocationDistance totalDistanceBetween;
    NSString *tripString;
    Settings *settingsVC;
    CGFloat km;

}
- (void)viewDidLoad{

    totalDistanceBetween = 0;

    locationManager = [[CLLocationManager alloc] init];
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.delegate = self;
    locationManager.distanceFilter = 250;
    startLocation = nil;

    [super viewDidLoad];
    // Do any additional setup after loading the view.
}
- (IBAction)start:(id)sender {

    [locationManager startUpdatingLocation];
}


- (IBAction)stop:(id)sender {

    totalDistanceBetween = 0;
    startLocation = nil;
    [locationManager stopUpdatingLocation];

}

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

    if (startLocation == nil){
        totalDistanceBetween = 0;
        self.startLocation = newLocation;
    }
    CLLocationDistance distanceBetween = [newLocation distanceFromLocation:startLocation ];
    self.startLocation = newLocation;
    totalDistanceBetween += distanceBetween;

    if(kmOrMile == 0){
        km = totalDistanceBetween * 0.001;

    }else{
        km = totalDistanceBetween * 0.000621371192237334;
    }

    tripString = [[NSString alloc]
                            initWithFormat:@"%.02f%@",
                            km, kmOrMileString];

    distance.text = tripString;
}

2 个答案:

答案 0 :(得分:0)

您可以使用horizontalAccuracy上的CLLocation属性来判断当前位置是否足以满足您的需求。在委托回调中检查其准确性,如果不够好,不要用它来计算距离。

desiredAccuracy设置正是如此,希望不承诺。来自文档:

  

在请求高精度位置数据时,位置服务提供的初始事件可能没有您请求的准确性。

答案 1 :(得分:0)

问题在于我的设备。我的设备形状粗糙,有水下体验,我猜想硬件内部有点叛逃。只是提醒大家总是尝试其他设备。即使你最不期望它也可以永远是你的手机。