从mapView检索当前用户位置,而不在屏幕上显示地图

时间:2012-03-09 03:01:44

标签: iphone objective-c ios cllocationmanager

我正在编写一个应用程序,用于存储您一整天都在的位置。我已经对CLLocationManager做了很多研究,并且在过去的3周内一直在测试我的应用程序。我使用CLLocationManager获得的位置有时非常不准确,有时距离我所在地4或5英里。 我有一个登录我的测试应用程序,并意识到每次我获得一个新的位置我的DidUpdateToLocation方法被连续3次调用,如在一秒钟内,我得到3个不同的位置。其中一个总是正确的,但另外两个是关闭的。我用它测试了不同的精度(百米,最接近的测量仪和最佳),但仍然有同样的问题。所以,我的第一个问题是:

无论如何,我可以找出哪个位置是正确的,以便我可以存储它?

我也意识到用户在地图视图上的当前位置总是非常准确,所以我考虑从mapView(蓝点)而不是CLLocationManager获取用户的位置,但我了解到mapView对象将会如果地图实际在屏幕上,则仅返回当前位置,但事实并非如此,因为我希望我的应用程序在后台运行。所以第二个问题是:

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

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

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

2 个答案:

答案 0 :(得分:1)

看一下Apple的示例代码Locate Me。它使用变量:

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

答案 1 :(得分:1)

  

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

查看您收到的位置的horizontalAccuracy属性。请勿使用不如您所查找的位置准确的位置。

  

我也意识到用户在地图视图上的当前位置是   始终非常准确

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