GPS機能、気づくと結構使っていますよね。
ではアプリでそれを実現する場合はどうすればよいのか?
今回は位置情報を取得する方法をご紹介します。
CLLocationManagerを使うための準備
GPS機能を利用するにはCLLocationManagerを使います。
CLLocationManagerを使うにはCoreLocation.frameworkを追加しなくてはいけないため、まずはフレームワークを追加しておきましょう。
Xcodeのプロジェクト画面から[General]の[Linked Frameworks and Libraries]の[+]をクリック。
検索窓から[CoreLocation]と入力し、[CoreLocation.framework]を選択して追加します。
そして、ヘッダファイルに以下のような記述をします。
#import <CoreLocation/CoreLocation.h>
これでCLLocationManagerが使えるようになります。
CLLocationManagerを使おう
それではCLLocationManagerを使っていきましょう。
ヘッダーファイルにCLLocationManagerDelegateを設定します。
ViewController.h
@interface ViewController : UIViewController <CLLocationManagerDelegate>
メイン処理ではまず、viewDidLoadでGPS機能利用の判断を行います。
[CLLocationManager locationServicesEnabled]を使うことで、初回起動時にGPS機能を利用するかを問い合わせるダイアログが表示されます。
distanceFilterはGPSの精度になります。以下の例では1000m = 1km距離が移動する毎に位置情報を取得するようになっています。
ViewController.m
- (void)viewDidLoad { [super viewDidLoad]; //GPSの利用可否判断 if ([CLLocationManager locationServicesEnabled]) { self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; self.locationManager.distanceFilter = 1000.0; [self.locationManager startUpdatingLocation]; NSLog(@"Start updating location."); } else { NSLog(@"The location services is disabled."); } }
つづいて、locationManager: didUpdateLocations: のメソッドを記述します。
このメソッドは新しい位置情報を取得した際に呼び出されます。
新しい位置情報はlocationsの配列の最後に設定されているので、[locations lastObject]を使って取り出します。
なお、位置情報はCLLocationクラスになります。
あとは取り出したクラスから、緯度と経度の値を取得することで位置の特定ができます。
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { CLLocation *newLocation = [locations lastObject]; // 位置情報を取り出す //緯度 latitude = newLocation.coordinate.latitude; //経度 longitude = newLocation.coordinate.longitude; NSLog(@"%f",latitude); NSLog(@"%f",longitude); }
位置情報が取得できない場合は、locationManager: didFailWithError:でエラー処理をしましょう。
下の処理ではUIAlertViewを使ってアラートを出しています。
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"エラー" message:@"位置情報が取得できませんでした。" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; [alertView show]; }
いかがでしょうか。
GPSを使うと考えると結構難しそうなイメージがありますが、実際にやってみるとそこまで難しくはないことがわかります。
むしろ、この取得した緯度、経度をどう使うか考える方が難しいかもしれませんね。
コメント