追記:Swift版はこちら
【Tips】iOSで標高を取得する方法(Swift 3.0対応) - koogawa blog
CoreLocationを使って、現在地の標高*1を測定する方法をメモしておきます。
実装方法
まずは「CoreLocation.framework」を追加します。
ヘッダをインポートします。
#import <CoreLocation/CoreLocation.h>
CLLocationManagerDelegateプロトコルを宣言します。
@interface ViewController : UIViewController <CLLocationManagerDelegate> @end
現在地情報の取得を開始します。
if ([CLLocationManager locationServicesEnabled]) { // インスタンスを生成 _locationManager = [[CLLocationManager alloc] init]; // デリゲートを設定 _locationManager.delegate = self; // 位置情報の取得開始 [_locationManager startUpdatingLocation]; }
この状態でiPhoneの位置情報が更新されると、次のメソッドが呼ばれます。
// 位置情報が更新されるたびに呼ばれる - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { self.textField.text = [NSString stringWithFormat:@"%.2f m", newLocation.altitude]; }
引数newLocation
の altitude
プロパティで標高が取得できます。単位はメートルです。
現在地情報の取得を停止するには次のメソッドを実行します。
if ([CLLocationManager locationServicesEnabled]) {
[_locationManager stopUpdatingLocation];
}
サンプルコード
注意点
- 標高は、現在の高度からではなく位置情報から測定されます
- つまり、東京タワーの展望台にいても地上にいても、取得できる標高は一緒になります
- ユーザが位置情報の取得を許可していない場合は測定できません
応用できそうなアプリ
- 標高測定アプリ(すでにいろんなアプリがリリースされている)
- 標高を競い合ったり、高さによって景品が出るゲーム
参考リンク
*1:海面からの高さ