2012-03-09 46 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

相關問題