Hi All,
I am developing an application that computes the distance travelled by the person. I am testing it on a iPad (Device-3.2). My iPad is using WiFi to get the current location. The results are highly inaccurate even though i have filtered the values. I don't know if GPS will give me accurate results. I am pasting the entire code below. Please verify the code and in case of errors please let me know. It would b very helpful if some one test the code on iPhone(3g) or iPad(3g). If not possible then just check the logic.....also i want to compute the calories burnt ..is there any formula to do so..? I have made simple view based project.....and used a distance label in nib file to set distance value but distance is updating at a very rapid rate....please correct it.
    //  iPacometerViewController.h
    @interface iPacometerViewController : UIViewController {
    CLLocationManager *locationManager;
    CLLocation *oldLocat;
    CLLocation *newLocat;
    IBOutlet UILabel *distanceLabel;
    }
    @property(nonatomic,assign)IBOutlet UILabel *distanceLabel;
    @property(nonatomic,retain)CLLocationManager *locationManager;
    @property(nonatomic,retain)CLLocation *oldLocat;
    @property(nonatomic,retain)CLLocation *newLocat;
-(void)computeDistanceFrom:(CLLocation *)oldL tO:(CLLocation *)newL;
@end
//  iPacometerViewController.m
#import "iPacometerviewController.h"
@implementation iPacometerViewController
static double distance = 0.0;
@synthesize locationManager;
@synthesize oldLocat;
@synthesize newLocat;
@synthesize distanceLabel;
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
       [super viewDidLoad];
    //initializing location manager
    locationManager =[[CLLocationManager alloc]init];
    locationManager.delegate = self;
    locationManager.distanceFilter = 150.0f;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [locationManager startUpdatingLocation];
    oldLocat = [[CLLocation alloc]init];
    newLocat = [[CLLocation alloc]init];
}
- (void)locationManager:(CLLocationManager *)manager
                  didUpdateToLocation:(CLLocation *)newLocation
                  fromLocation:(CLLocation *)oldLocation
         {
    if (newLocation.horizontalAccuracy  60.0) return;   // data is too long ago, don't use it
    NSLog(@"oldd %@",oldLocation);
    self.oldLocat = oldLocation;
    self.newLocat = newLocation;
    if(oldLocat!=nil)
    {
    [self computeDistanceFrom:oldLocat tO:newLocat];
    }
}
-(void)computeDistanceFrom:(CLLocation *)oldL tO:(CLLocation *)newL
         {
    NSLog(@"oldd %@",oldL);
    NSLog(@"new %@",newL);
    CLLocationDistance currentDistance = [oldL distanceFromLocation:newL];
    NSLog(@"you have travel=%f",currentDistance);   
        distance = distance + currentDistance;
    double distanceInKm = distance/1000;
    NSString *distanceLabelValue = [NSString stringWithFormat:@"%1.2f Kms",distanceInKm];
    distanceLabel.text = distanceLabelValue;
}   
- (void)didReceiveMemoryWarning {
     // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
     // Release any cached data, images, etc that aren't in use.
}
- (void)dealloc {
        //[mapView release];
    [oldloct release];
    [newLocat release];
    [locationManager release];
    [super dealloc];
}
@end