始终为负速度iOS
我正在使用委托方法:始终为负速度iOS,ios,iphone,location,cllocationmanager,Ios,Iphone,Location,Cllocationmanager,我正在使用委托方法: - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 要获取当前和旧位置,我使用: CLLocation *newLocation = [locations lastObject]; self.currentUserLocation = newLocation; if(self.oldLocation == nil) { self.
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
要获取当前和旧位置,我使用:
CLLocation *newLocation = [locations lastObject];
self.currentUserLocation = newLocation;
if(self.oldLocation == nil)
{
self.oldLocation = newLocation;
return;
}
编辑1:我现在可以获取旧位置
但是当我使用[newLocation speed]时,我总是有一个负速度代码>=-1
使用的设备是iphone4s。你有什么想法吗
另外,对于locationManager,我使用kCLLocationAccuracyBestForNavigation和KClInstanceFilterOne。我可以在地图上看到我现在的位置在移动
编辑2:
我最终用这种方法解决了速度问题:
- (CLLocationSpeed)speedTravelledFromLocation:(CLLocation*)fromLocation;
{
NSTimeInterval tInterval = [self.timestamp timeIntervalSinceDate:fromLocation.timestamp];
double distance = [self distanceFromLocation:fromLocation];
double speed = (distance / tInterval);
return speed;
}
(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
此方法返回根据self和fromLocation之间的距离和时间增量计算的速度
我在此存储库中找到了此方法:
希望它能帮助别人;)
编辑3
明白了!这是因为我在模拟器上测试!我在一台设备上进行了测试,使用[newLocation speed]的速度是正确的
谢谢你的帮助。
当做
Lapinou.为什么希望位置回调包含两个或更多位置
此方法:
- (CLLocationSpeed)speedTravelledFromLocation:(CLLocation*)fromLocation;
{
NSTimeInterval tInterval = [self.timestamp timeIntervalSinceDate:fromLocation.timestamp];
double distance = [self distanceFromLocation:fromLocation];
double speed = (distance / tInterval);
return speed;
}
(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
通常只提供一个位置,除非由于某种原因在调用该方法之前到达了多个位置,但通常只提供一个位置
问题是,您假设该方法在提供新位置的同时提供了您以前的位置,而事实并非如此。负速度通常意味着您没有GPS信号。哦,好的!我现在明白了。。。我将尝试使用它:如果(self.oldLocation==nil)self.oldLocation=newLocation;但是对于负速度,你有什么想法吗?无论如何谢谢你!:)不知道这个,抱歉,只是一个旁注,旧的位置通常是缓存的,所以你得到的第一个可能是一个相对错误的导航角度。我总是检查新位置的时间戳和过滤器,例如,大于5分钟。Ok。我编辑我的代码,并使用它,我可以得到我的第一个位置,这将是我的旧位置。但是为什么我的速度总是=-1?看看我的答案,试试不同的委托方法。哦,对不起。不知道它已被弃用,仍在使用它。。显示代码检查速度的位置。这一定行得通。我在我的帖子中写道:【新址速度】;,通常以m/s为单位返回速度。但一直都是-1