如何同时计算来自 CLLocationManager 的所有 gps 数据

Posted

技术标签:

【中文标题】如何同时计算来自 CLLocationManager 的所有 gps 数据【英文标题】:How to calculate ALL gps data from CLLocationManager at the same time 【发布时间】:2014-10-04 08:23:48 【问题描述】:

我需要在我的程序中计算所有 gps 参数,所以我使用这段代码:

(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
    CLLocation* loc = [locations lastObject]; 

它收集 loc 对象中的所有 gps 测量值(高度、速度等),我有纬度/经度信息(loc.coordinate.lattitudeloc.coordinate.longitude)但这些是新的测量坐标。

由于我还想计算测量之间的距离,如何从 didUpdateLocations 方法中检索“新”坐标和“旧”坐标?

如果我在程序中使用 didUpdateToLocation 方法添加另一个 locationManager 调用(这将给出新旧坐标):

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

根本没有调用初始locationManager方法(didUpdateLocations),所以无法计算所有gps数据加上距离...

【问题讨论】:

您列出的第二种方法已被弃用 - 由第一种方法取代,但如果您实施它,则第一种方法不会被调用 - 正如您所发现的那样。您需要将先前的位置存储在属性中,并在下次调用时根据此位置进行比较/计算 作为 ios 编程新手,如何将位置对象复制到另一个对象(即旧位置),在 CLLocationManage 之外可见(这样我就可以比较下一个 CLLocationManager 上的最新位置数据方法调用)?我可以访问 loc 对象的 lat/long 属性,但我将调用的 CLLocationDistance 方法需要对象作为参数,而不是属性。 只需为您的类创建一个存储 CLLocation 的属性 【参考方案1】:

成功复制属性后,我有了这个工作代码,但我无法理解:

(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations _locManagerIteration++; NSLog(@"位置管理器迭代 = %ld", _locManagerIteration);

CLLocation* loc = [locations lastObject]; // 位置保证至少有一个对象

if (_locManagerIteration == 1) //初始化第一个过去坐标对象 self.pastCoordinate = [位置 lastObject]; 别的 CLLocationDistance _pointDistance = [self.pastCoordinate distanceFromLocation:loc]; NSLog(@"点到点距离 = %f", _pointDistance); self.pastCoordinate = [位置 lastObject]; NSLog(@"点到点距离 = %f", _pointDistance);

_totalDistance = _totalDistance + _pointDistance; //计算总距离 _totalDistance = _totalDistance / 1000; //以公里为单位转换总距离 在上面的部分中,CLLocationDistance 调用正确地将距离(以米为单位)放在我的全局变量 _pointDistance 中。我打印 _pointDistance 变量并查看数字(NSLog ...)。但是,当我再次在 if-then 语句之外打印相同的全局变量时,该值始终为零......

在 else 括号内,_pointDistance 变量在 XCODE 中为黑色(并打印值),在 else 括号外显示为绿色,值为零....无法理解它...

【讨论】:

以上是关于如何同时计算来自 CLLocationManager 的所有 gps 数据的主要内容,如果未能解决你的问题,请参考以下文章

当预期类型可能不同时,如何安全地处理来自 JSON 的数据?

如何在仍然引用来自 pub.dartlang.org 的包的同时运行私有 pub 服务器?

如何配置 Apache2 以允许来自同一 IP 地址的多个同时连接?

Redshift 暂停和恢复

如何确定传入连接来自本地计算机

在收听来自stdin的C输入的同时收听UDP套接字