2014-01-22 58 views
4

计算在IOS 7速度之前的iOS 7 I用于计算速度,如下如何使用coreLocation框架

-(void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 

     double speed = newLocation.speed; 
     NSLog(@"Speed of Device is %f",newLocation.speed); 

     // manual method 
     if(oldLocation != nil) 
     { 
      CLLocationDistance distanceChange = [newLocation getDistanceFrom:oldLocation]; 
      NSTimeInterval sinceLastUpdate = [newLocation.timestamp 
      timeIntervalSinceDate:oldLocation.timestamp]; 
      double calculatedSpeed = distanceChange/sinceLastUpdate; 

      NSLog(@"Speed of Device is %f",calculatedSpeed); 
    } 
} 

,因为这种方法已被弃用。请给我建议另一种使用CoreLocation使用iOS7来计算速度的方法。

+0

该文档本身告诉你使用什么方法。从苹果文档:告诉委托人有新的位置值可用。 (在iOS 6.0中不赞成使用locationManager:didUpdateLocations:) –

回答

4

你可以做到以下几点:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
    CLLocation *loc = locations.lastObject; 
    double speed = loc.speed; 
    NSLog(@"%f", speed); 
} 
+0

这总是给出-1。 –

+0

您是否在实际设备上测试过? – Hannes

+0

是的,我在真实设备上进行过测试,所以我像@Durga Prasad Vundavalli 1st Approach手动计算。 –

2

方法“getDistanceFrom:”只是重命名为“distanceFromLocation:” - 你可以使用它。

CLLocationDistance distanceChange = [newLocation distanceFromLocation:oldLocation];

+0

该方法很好..我们如何从locationManager:manager didUpdateToLocation:newLocation fromLocation:oldLocation被弃用 –

4

1日法:从以前的调用保存oldLocation。 。更精确kCLLocationAccuracyBestForNavigation。 在某些情况下,这可能会给您带来不准确的结果(如停止或错过报告一个位置等)。

CLLocationDistance distanceChange = [newLocation distanceFromLocation:oldLocation]; 
NSTimeInterval sinceLastUpdate = [newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp]; 
double calculatedSpeed = distanceChange/sinceLastUpdate; 
NSLog(@"calculatedSpeed using old location:%.1f",calculatedSpeed); 

第二个方法是使用速度 property.using这个属性,你会得到车辆(移动速度)的当前速度。其中会给速度米/秒。将其转换为公里/小时使用

location.speed * 3.6 

使用kCLLocationAccuracyBestForNavigation

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
    CLLocation *location = locations.lastObject; 
    double speed = location.speed*3.6; 
    NSLog(@"%f", speed); 
} 
+0

这总是给-1。 –

+0

@DurgaPrasadVundavalli亲爱的,在第一种方法,你告诉我**计算速度**实际上** **速度** **或**公里/小时** **会给我们**速度**。 – vky

+0

@DurgaPrasadVundavalli亲爱的, 第二种方法总是给我-1。 我尝试这两种方法,第一个给我一个正面的价值,但你不提及** **的速度**实际上** **速度** **或**公里/小时* *。 谢谢! – vky

0

在公里/小时的其他解决方案。

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
CLLocation *location = [self.locationManager location]; 

     double speedCalculada = location.speed * 3.6; 
     self.lblVelocidad.text = (location.speed<0)[email protected]"-- km/h":[NSString stringWithFormat:@"%d   Km/h", (int) speedCalculada]; 
}