2012-03-09 22 views
0

我正在写一个应用程序,它存储了你一整天都在的地方的位置。我已经在CLLocationManager上做了大量的研究,并且在过去的三周里一直在测试我的应用程序。我使用CLLocationManager获得的位置有时是非常不准确的,有时候距离我4到5英里远。 我有一个日志在我的测试应用程序,并意识到,每次我得到一个新的位置时,我的DidUpdateToLocation方法被连续调用3次,就像在一秒钟内,我得到3个不同的位置。其中一个永远是对的,但另外两个是关闭的。我用不同的精度(百米,距离最近的十米和最好)对它进行了测试,但仍然有同样的问题。所以,我的第一个问题是:从mapView中检索当前用户的位置,没有地图在屏幕上

是否有无论如何我可以找出哪些位置是正确的,所以我可以存储它?

我也意识到,用户在地图视图上的当前位置总是非常准确,所以我想从mapView(蓝点)而不是CLLocationManager获取用户的位置,但我知道一个mapView对象将只返回当前位置,如果地图实际上在屏幕上,并且不是这种情况,因为我希望我的应用程序在后台运行。所以第二个问题是:

无论如何从mapView中获取用户的当前位置而不显示地图吗?或者至少使用mapView用于查找当前位置的相同技术?

如果您有任何有关mapKit和CLLocationManager的经验,请分享您的想法。

感谢您的时间。任何帮助表示赞赏。

回答

1

反正是有,我可以找出这些位置是正确的 一个,这样我可以存储呢?

看看您收到的位置的horizontalAccuracy属性。不要使用比您要查找的位置更准确的位置。

我也意识到,在地图上查看用户的当前位置 总是很准确

地图视图可能不必API的是比更准确的任何特殊权限是什么你有,它只是更好地使用它们。每次需要修复时,请尝试缓存位置,然后在获得足够准确的新位置时进行更新,而不是从头开始。

+0

迦勒,感谢您的提示!横向准确性实际上是有用的。我认为CLLocation经理不会返回比我在locationManager.desiredAccuracy中设置的准确度更低的位置,但事实上确实如此!一旦我滤除了所有比我想要的准确度更不准确的位置,我只能找回那些好的! – 2012-03-10 01:57:05

+0

我相信这是另一种方式...... CLLocationManager不会退出,它会返回比您想要的准确度更精确的位置。提供更准确的修复通常意味着使用更多功率。如果它确切地知道你在哪里,它会告诉你,但是如果你不需要一个比从最近的蜂窝塔或wifi热点获得的更精确的修正,它可能不会启动GPS接收机。 – Caleb 2012-03-10 02:40:17

1

看看Apple的示例代码定位我。它使用变量:

CLLocation *bestEffortAtLocation; 

,以确定在更新,如果该位置是不是设置到最准确的位置发现了一个时限不到最后位置少。 特别看一下示例代码中的GetLocationViewController。我在我的应用程序中使用了这些代码,并且效果很好。

https://developer.apple.com/library/ios/#samplecode/LocateMe/Listings/Classes_GetLocationViewController_m.html#//apple_ref/doc/uid/DTS40007801-Classes_GetLocationViewController_m-DontLinkElementID_8

+0

Hubert,谢谢!代码帮了我很多。它向我展示了如何使用horizo​​ntalAccuracy属性并仅选择准确的位置。 – 2012-03-10 02:01:13

相关问题