2010-08-15 64 views
2

我正在開發一個使用gps的應用程序。我需要很高的準確性,所以我使用了kCLLocationAccuracyBestForNavigation來獲得所需的準確性。 當我運行應用程序時,按預期調用了follwing方法。iPhone CoreLocation - 準確無法正常工作?

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

這種方法,我檢查,如果精度與follwing代碼段不夠好之內:

if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) { 
... 
} 

但如果塊永遠不會活躍,因爲newLocation.horizo​​ntalAccuracy下面沒有打算17.00米。當我在iPhone 3GS OS 3.1.2上運行此代碼時,一切運行良好。但是,由於我升級到4.0.1似乎有一個準確性問題。它甚至不能和kCLLocationAccuracyNearestTenMeters在iOs 3.1.2上運行平穩和穩定。

你對我有什麼提示嗎?怎麼回事,我該如何解決我的問題?

回答

3

您的if區塊的問題在於,您將比較horizontalAccuracy(以米爲單位)與desiredAccuracy(其設置爲常數值kCLLocationAccuracyBestForNavigation)。這些常量沒有在文檔中定義,但其他常量只是枚舉。因此,kCLLocationAccuracyBestForNavigation可能只是字面上等於0.您的horizo​​ntalAccuracy永遠不會小於或等於零。

您需要針對實際數字測試水平精度。我得到的最佳水平精度是5.0。因此,您可能需要將您的if語句更改爲!(newLocation.horizontalAccuracy > 5.0)

1

我需要糾正我的最後一個問題。 kCLLocationAccuracyHundredMeters實際上解析爲100.千米(1000)和軸距(3000)也是如此。所以,你可以使用這些進行比較。但是,kCLLocationAccuracyBest是-1,而BestForNavigation是-2。所以,你無法比較你的橫向準確性和那些。