1

私は、メートル単位で距離を計算し、さらに使用するために緯度経度を記録するこのウォーキング/ランニング アプリに取り組んでいます。距離を計算すると、毎回間違った距離が得られます。他のランニング アプリと比較したところ、通常、私の距離とは異なる距離が表示されます。

私が使用しているコードは次のとおりです。

#define kDesiredAccuracy 5.0f

self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
self.locationManager.distanceFilter = kDesiredAccuracy;
_routes = [[NSMutableArray alloc] init];
lastKnownLocation = nil;

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    // return if accuracy is less than 0 or is greater than desired accuracy.
    if (newLocation.horizontalAccuracy < 0)
    {
        return;
    }
    if(newLocation.horizontalAccuracy > kDesiredAccuracy)
    {
        return;
    }

    NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
    CLLocationSpeed speed = [newLocation speed];
    // return if stale data or user is not moving
    if (locationAge > 5.0 || speed <= 0) return;

    //return if first location is found
    if(lastKnownLocation == nil)
    {
        lastKnownLocation = newLocation;
        return;
    }

    CLLocationDistance distance = [newLocation distanceFromLocation:(self.pramDistance > 0)?lastKnownLocation:oldLocation];
    if(distance > 0)
    {
        // save distance for future use
        NSMutableDictionary *dict=[[NSMutableDictionary alloc] init];
        [dict setObject:[NSString stringWithFormat:@"%g", newLocation.coordinate.latitude] forKey:@"latitude"];
        [dict setObject:[NSString stringWithFormat:@"%g", newLocation.coordinate.longitude] forKey:@"longtitude"];
        [dict setObject:[NSString stringWithFormat:@"%f",distance]   forKey:@"distance"];
        [_routes addObject:dict];
        // add distance to total distance.
        self.pramDistance += distance;
    }

}

ユーザーがウォーキング/ランニングを終了したら、マップ ビューでウォーキング/ランニングのルートを描画します。この目的のために、記録されたすべての場所を使用して MKMapView に策略線を引くだけです。

マップ ビューにルートのジグザグ線が表示され、距離が常に正しくありません。どこが間違っているのか、適切に機能させるには何を修正すればよいのか教えてください。

比較は次のとおりです(左が他のアプリで、右が私のアプリです): 他のアプリと自分のアプリの比較

4

2 に答える 2