how to calculate the current speed and average speed of user travelling from current location to particular loaction in map in iphone [closed]

匿名 (未验证) 提交于 2019-12-03 01:29:01

问题:

i am having a map application.when a person travels from current location to particular location i want to calculate the distance covered by the person, the current speed of the person ,average speed of the person .can anybody help me in solving this problem.please provide me any sloution to solve this problem.Thanks

回答1:

Improve your acceptance rate. Use following methods to get distance in miles or kilometers. You have to declare timer in your header file synthesize it.

//SpeedViewController.h #import  #import  #import   @interface SpeedViewController : UIViewController  {     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.     // e.g. 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 any further query please do leave a comment. I have not tested this on device but logically it should work.

Hope it helps.



回答2:

In order to determine any speed, you'll want to figure:

Distance: Take your two latest geographic coordinate readings (and the time each was recorded) to calculate the distance between them

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

Speed: Using the distance between the latest GPS coordinate reading and the previous, calculate the speed by the formula speed = distance/duration. So, the distance you found between the two geo coordinates divided by the duration in seconds or minutes or whatever. Then your answer will be speed is x miles or kilometers per whatever.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!