Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
始终为负速度iOS_Ios_Iphone_Location_Cllocationmanager - Fatal编程技术网

始终为负速度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