iOS 的 CoreLocation 支援三種定位方式,內建的 GPS 定位、電信基地抬的三角定位與 Wi-fi 無線網路基地台定位,下列程式碼將示範如何使用 CoreLocation 來做簡單的定位。(View-based Template)
首先先加入 CoreLocation 的 Framework,加入的方法是在 Groups & Files 內的專案名稱上按下右鍵 > Add > Existing Frameworks,之後選擇需要的 framework 並 Add 即可。
在加入 Framework 之後,還必須要匯入 CoreLocation 的標頭檔。
#import <CoreLocation/CoreLocation.h>
最後則是在 ViewCotroller.h 中設定代理,才算是完成環境的設置。
@interface CoreLocationViewController : UIViewController <CLLocationManagerDelegate> {
接著在程式進入點的地方輸入以下程式碼,做初始化與環境設定。
- (void)viewDidLoad {
[super viewDidLoad];
//locationManager初始化
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
//設定需要重新定位的距離差距(0.01km)
locationManager.distanceFilter = 10;
//設定定位時的精準度
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
}
上述重新定位的距離差距與精準度,並不是絕對的,在本示範的設定是採用最高標準,如果是要使用在導航等方面,kCLLocationAccuracyBestForNavigation 會是不錯的選擇。
做好初始化設定之後,在 ViewCotroller.m 加上一個 CoreLocation 內建的函式,其目的是用來取得目前的經緯度與海拔高度等資料,並利用所取得的資料顯示在對應的 Label 裡。
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *) oldLocation {
longitudeLabel.text = [NSString stringWithFormat:@"%f", newLocation.coordinate.longitude];
latitudeLabel.text = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];
altitudeLabel.text = [NSString stringWithFormat:@"%f", newLocation.altitude];
}
在最後就是設定一個按鈕事件來 Restart CoreLocation Service。
//Restart
[locationManager stopUpdatingLocation];
[locationManager startUpdatingLocation];
沒有留言:
張貼留言