How to calculate the current speed and average speed of a user moving from a current location to a specific position on the map on iphone

I have a map application. When a person travels from a current location to a specific place, I want to calculate the distance traveled, the person’s current speed, and the person’s average speed. Can someone help me in solving this problem. Please give me any slution to solve this problem. thanks

+7
source share
2 answers

Increase your speed. Use the following methods to achieve distances in miles or kilometers. You must declare a timer in your header file, synthesizing it.

//SpeedViewController.h #import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> #import <MobileCoreServices/UTCoreTypes.h> @interface SpeedViewController : UIViewController <CLLocationManagerDelegate,UINavigationControllerDelegate> { CLLocationManager *locManager; CLLocationSpeed speed; NSTimer *timer; CLLocationSpeed currentSpeed; float fltDistanceTravelled; } @property (nonatomic,retain) NSTimer *timer; -(float)getDistanceInKm:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation; -(float)getDistanceInMiles:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation; @end //SpeedViewController.h #import "SpeedViewController.h" #define kRequiredAccuracy 500.0 //meters #define kMaxAge 10.0 //seconds #define M_PI 3.14159265358979323846264338327950288 /* pi */ @implementation SpeedViewController @synthesize timer; - (void)startReadingLocation { [locManager startUpdatingLocation]; } // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. - (void)viewDidLoad { [super viewDidLoad]; CLLocationManager *locationManager=[[CLLocationManager alloc] init]; locationManager.delegate=self; locationManager.desiredAccuracy=kCLLocationAccuracyBestForNavigation; [locationManager startUpdatingLocation]; } - (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)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // eg self.myOutlet = nil; } - (void)dealloc { [super dealloc]; } - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { NSLog(@"new->%d old->%d",(newLocation==NULL),(oldLocation==NULL)); if(newLocation && oldLocation) { fltDistanceTravelled +=[self getDistanceInKm:newLocation fromLocation:oldLocation]; } } //this is a wrapper method to fit the required selector signature - (void)timeIntervalEnded:(NSTimer*)timer { fltDistanceTravelled=0; [self startReadingLocation]; } -(float)getDistanceInKm:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { float lat1,lon1,lat2,lon2; lat1 = newLocation.coordinate.latitude * M_PI / 180; lon1 = newLocation.coordinate.longitude * M_PI / 180; lat2 = oldLocation.coordinate.latitude * M_PI / 180; lon2 = oldLocation.coordinate.longitude * M_PI / 180; float R = 6371; // km float dLat = lat2-lat1; float dLon = lon2-lon1; float a = sin(dLat/2) * sin(dLat/2) + cos(lat1) * cos(lat2) * sin(dLon/2) * sin(dLon/2); float c = 2 * atan2(sqrt(a), sqrt(1-a)); float d = R * c; NSLog(@"Kms-->%f",d); return d; } -(float)getDistanceInMiles:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { float lat1,lon1,lat2,lon2; lat1 = newLocation.coordinate.latitude * M_PI / 180; lon1 = newLocation.coordinate.longitude * M_PI / 180; lat2 = oldLocation.coordinate.latitude * M_PI / 180; lon2 = oldLocation.coordinate.longitude * M_PI / 180; float R = 3963; // km float dLat = lat2-lat1; float dLon = lon2-lon1; float a = sin(dLat/2) * sin(dLat/2) + cos(lat1) * cos(lat2) * sin(dLon/2) * sin(dLon/2); float c = 2 * atan2(sqrt(a), sqrt(1-a)); float d = R * c; NSLog(@"Miles-->%f",d); return d; } @end 

If you have another request, leave a comment. I have not tested this on a device, but logically it should work.

Hope this helps.

+6
source

To determine any speed, you want to see:

Distance : take the last two geographical coordinates (and the time that was recorded) to calculate the distance between them

To do this, you can read about the theory here , or you can check the code here .

Speed . Using the distance between the last GPS coordinate display and the previous one, calculate the speed using the formula: speed = distance / duration. Thus, the distance that you found between the two geo-coordinates, divided by the duration in seconds or minutes or something else. Then your answer will be the speed of x miles or kilometers for everything.

+2
source

All Articles