1

場所の更新を初めて開始したとき、値は常に 0 になるとは限りません。場合によってはそうですが、0 をわずかに超える値が得られることもあります。2 などの値が得られます。粗いので、ストップを押してもう一度開始すると、小さな値が得られ、0 になるまでそれを続けます。私の目的の距離フィルターは 250 メートルですが、これより下の開始時に値を取得できません! なぜこれが起こっているのか、どうすればこれに対処できますか. 以下は、これを屋内で開始する場合に特に問題です (これは GPS の初期確立の問題であると考えられます)。開始前にユーザーが屋外にいることを確認するための簡単なアラートビューでこれに対処できますが、これは屋外で時々発生するため、この問題を解決したいと考えています。また、0 から開始してすぐに運転を開始すると、不正確な値が得られます。

解決策についての私の推測: 位置情報の更新を開始する前に、どのようにして GPS 接続が安定しているかを確認する必要があります。

CLLocationManager クラス リファレンスには、上記のソリューションに役立つものは何も表示されません。

CLLocationManager クラス リファレンス

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;
}
4

2 に答える 2

0

horizontalAccuracyプロパティ onを使用してCLLocation、現在の場所がニーズに十分かどうかを判断できます。デリゲート コールバックで精度を確認します。精度が十分でない場合は、距離を計算しないでください。

desiredAccuracy設定はまさにそれであり、約束されたものではありません。ドキュメントから:

高精度の位置データを要求する場合、位置情報サービスによって配信される最初のイベントには、要求した精度がない場合があります。

于 2013-11-20T18:22:57.883 に答える