en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

1.12.2011

使用 Core Location 做簡易的定位


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];






沒有留言:

張貼留言