我正在开发GPS应用程序。 你知道如何检测移动设备的速度吗?
实际上,我需要每2秒检测一次速度。
我知道当位置发生变化时会调用 didUpdateToLocation
方法。
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
但我认为这种方法不适合我的问题。
那么,我需要在2秒内检查[CLLocationManager location]
的速度吗?
有什么建议吗?
提前致谢。
答案 0 :(得分:27)
下面的代码如何使用委托方法。 或者,如果您确实想要轮询,请保留以前的位置并检查距离上次轮询更改的距离,并使用手动方法(也如下所示)计算速度。
速度以m / s计算/提供,因此对于公里数乘以3.6或对于英里/小时乘以2.23693629。
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
//simply get the speed provided by the phone from newLocation
double gpsSpeed = newLocation.speed;
// alternative manual method
if(oldLocation != nil)
{
CLLocationDistance distanceChange = [newLocation getDistanceFrom:oldLocation];
NSTimeInterval sinceLastUpdate = [newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp];
double calculatedSpeed = distanceChange / sinceLastUpdate;
}
}
答案 1 :(得分:0)
您只能真正使用您在问题中建议的委托方法。
即使您每2秒访问[CLLocationManager位置],您也只会收到上次委托方法中最后收到的坐标。
为什么需要每两秒轮询一次?在某些情况下,iphone可以在更短的时间内更新它的坐标。
HTH