2012-10-27 59 views
2

如果标题含糊不清,我很抱歉,但我不完全如何标题我的情况。我正在为使用GPS的iPhone编写应用程序。在didUpdateLocations:方法中,我对任意大小的变量测试位置的水平精度(我将它设置为50,因为这似乎是一个很好的起点)。如果水平精度小于50,则保存位置并增加计数器以指示位置已成功收集。如果水平精度未通过测试,则位置成功计数器递减。我一直在想出一个方程来调整水平精度测试值。自适应精度算法/方程

这个问题很容易解决,如果你只是使用计数器进行精度测试,但我希望得到更少线性的东西。我希望计数器在某种意义上被加权,以便准确性测试变量一开始就会快速接近零,然后越来越慢。

我曾经有过这样的工作,但一旦精度测试变得过于精确,GPS就无法匹配,它就会开始振荡。之后,它会跳到数值之间,如1和80左右。这里是什么样子:

int previousCounter = successCounter; 

if (location.horizontalAccuracy < accuracy) 
{ 
    // save location... 
    successCounter++; 
} 
else 
    successCounter--; 

int direction = previousCounter - successCounter; 
accuracy = 50 - direction * pow(successCounter, 2); 

我一直在用这个东西几个小时顺藤摸瓜,似乎无法得到的东西实际工作,我试图搜索谷歌,但我不完全知道要寻找什么。我希望有人在这里可以提供帮助。

+0

如果精度过小时将精度提高一定百分比,过大时将精度降低一定百分比如何? –

+0

感谢您的输入。我最终解决了这个问题,没有任何花哨的方程式。我会发布我的解决方案,以便可以关闭此事。 –

回答

0

我最后只是使用线性方法,没有方程式。我可能最终会对successCounter增量进行加权,只是稍微调整它。最后,线性方法足以满足我试图实现的目标,这是我在使用应用程序进行现场测试后发现的。当我想到它时,这甚至没有真正实现我想要实现的目标,所以这就是我最终使用线性方法的原因。我原本打算为这种算法提供GPS自适应精度,但是我意识到它只能提供有关当前读数准确度的信息。轻微失败:/