将 GPS 点与当前位置进行比较

Posted

技术标签:

【中文标题】将 GPS 点与当前位置进行比较【英文标题】:Compare GPS points to the current location 【发布时间】:2011-08-13 08:27:58 【问题描述】:

我正在使用实例方法 distanceFromLocation 将我的新位置与 const 定义的位置进行比较

我给 CLLocation *bonuslocation 一个即时值,这是我感兴趣的 gps 点之一,然后我将其与新位置进行比较 如果距离播放音频文件的点小于 20m。

虽然这对一个位置非常有效,但它根本不起作用 如果我在本地向 updatelocationmanager 函数添加多个..

代码:

CLLocation *bonuslocation = [.....]
CLLocationDistance distancea = [bonuslocation distanceFromLocation newlocation]
if (distancea <= 20)

//play an audio

我可以就如何为 10 gps 点提供一些建议吗????

今天是我的生日,你能把它当作生日礼物吗? 谢谢。。

【问题讨论】:

【参考方案1】:

为什么不把它放在一个循环中呢?还是只在 10 个地点进行比较?究竟是什么不工作?

编辑:

你从来没有提到你从哪里得到你的其他位置,所以让我们假设你以某种方式制作它们并将它们存储在一个数组中......

NSArray *locationArray;

我从您的评论中了解到,每个位置都有不同的声音?一种简单的方法是将声音存储在第二个数组中...

NSArray *soundsArray;

然后你可以在你的 locationManager:didUpdateToLocation:fromLocation 中执行以下操作:

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

    for(int i=0; i<[locationArray count]; i++)
        CLLocation *location = (CLLocation *)[locationArray objectAtIndex:i];
        if([newLocation distanceFromLocation:location] < 20.0)
            //perform some action e.g.
            //play sound at [soundArray objectAtIndex:i]
        
    

虽然我不建议简单地播放声音,因为这个简单的逻辑会导致声音在阈值内的每个位置同时播放一次。

【讨论】:

当我初始化 CLLOcation *bonuslocation 时,它只保留我声明的值之一,所以如果我说 CLLocation *differentlocation 它执行那部分代码,但不执行奖励位置的那部分.. 清楚吗? ? 如果我做一个 for(i=0; i=10; i++) 并在里面放一个 switch : case 你认为它会好吗?? 请查看我的答案的编辑。为什么需要 switch 语句?您是否对每个位置执行不同的操作?

以上是关于将 GPS 点与当前位置进行比较的主要内容,如果未能解决你的问题,请参考以下文章

如何将用户的GPS位置与可用的GPS位置进行比较?

如何比较文本文件中的 gps 坐标以查看哪对最接近用户的当前位置 [关闭]

android打开网页,并保存当前位置源码

比较具有一定余量的 GPS 坐标

如果没有GPS,则无法使用navigator.geolocation进行反应原生的当前位置

Android 成功 使用GPS获取当前地理位置(解决getLastKnownLocation 返回 null)