2010-05-19 50 views
2

我有幾個關於CoreLocation和GPS的問題。iPhone SDK:使用GPS跟蹤用戶位置

首先,核心位置中的哪個方法用於持續獲取用戶當前座標?在什麼時間間隔應該檢索?

其次,應該將這些座標來每次被接收到的時間推入的NSMutableArray,使座標的陣列將代表用戶路徑?

謝謝,只是想開始讓我介意這一點。

回答

11

一個非常簡化版本:

首先,採用<CLLocationManagerDelegate>協議在您的.h和#import <CoreLocation/CoreLocation.h>

然後在.M走:

- (void)viewDidLoad { 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    [locationManager startUpdatingLocation]; 
} 


-(void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    CLLocationCoordinate2D here = newLocation.coordinate; 
    NSLog(@"%f %f ", here.latitude, here.longitude); 
} 

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation方法會ping通每個核心位置有話要說給你,這應該每隔幾秒鐘發生的時間。這些CLLocation對象包含有關準確性的信息,因此您可以在該方法中篩選出好的點。

一定要打電話[locationManager stopUpdatingLocation]然後[locationManager release]在某個時刻!

祝你好運!

+0

我可能是錯的,應該:的NSLog(@ 「%F%F,%@」,here.latitude,here.longitude);不是:NSLog(@「%f%f」,here.latitude,here.longitude); – fuzzygoat 2010-05-20 14:11:11

+0

哦,絕對正確。這會給你一個BAD_ACCESS錯誤。糾正。 – 2010-05-21 12:32:07

+0

即使應用程序已最小化,更新位置報價器是否也能正常工作? – kmehta 2011-06-14 14:57:46

1

您可以定義什麼範圍是可接受的準確性,以及您希望接收自動更新的頻率(基於距離最後一點機制的距離)。您也可以關閉位置管理器,並隨時通過定時器的使用將其恢復。

至於保存位置來建立路徑,其並不那麼簡單。您將不斷獲得GPS位置,直到達到所需的準確度,並且對於未來的任何點,您可能會在獲得良好位置之前得到多個不準確的位置。所以建立這些點的列表基本上只是他們的路徑列表,以及許多額外的點。 你可以通過只保存那些有你想要的準確性的點來解決這個問題,但是在這方面它是一個不完美的世界。

我會建議你把兩個列表最好的情況,一個是路徑,另一個是的,你是在比較,直到你得到一個高度精確的位置,然後把你的路徑列表上的位置運行列表。 一些示例項目沿着這些方向行事,請檢查它們。

1

你必須做到以下幾點:

  1. 如果設備無法從GPS設備訪問互聯網
    1. 獲取座標
    2. 通過短信
    3. 接收和解碼發送這些座標短信網關的短信必須配置爲從設備接收信息。
    4. 更新應用程序數據庫的信息,或者您正在使用
    5. 更新在地圖上的位置與最新資訊
  2. 如果設備可以訪問互聯網
    1. 獲取從GPS設備座標任何其他店
    2. 連接到應用程序服務器(可能是某種服務)並上載信息
    3. 更新應用程序數據庫或您正在使用的任何其他商店的信息
    4. 更新在地圖上的位置與最新資訊
+1

忘掉1.如果你沒有互聯網,你將無法獲得設備的座標。至少不是沒有用戶按下「發送」。沒有用戶交互,iOS不允許發送短信。 – 2012-09-29 22:58:46