Copyright (C) iPhoneアプリ開発備忘録 All rights reserved.
ブログ内で記したコード、内容の正確性は保証いたしません。
記載内容を実装したことにより発生した不具合・損害等の責任は一切負いません。



2009年09月26日

CLLocationで現在位置を取得する



現在地情報を取得する方法。

1. XcodeでプロジェクトにCoreLocation.framework を追加する。

2. ヘッダファイルに CLLocationManagerDelegate の指定、 CoreLocation.frameworkのヘッダファイルを追加する。
RootViewController.h
#import <CoreLocation/CoreLocation.h>

@interface RootViewController : UIViewController <CLLocationManagerDelegate> {

CLLocationManager *locationManager; // 現在地情報取得
double latitude, longitude; // 取得した緯度経度

@property (nonatomic, retain) CLLocationManager *locationManager;
※<>は半角にすること。

3. コード部分の編集
RootViewController.m
#import "RootViewController.h"

@synthesize names, locationManager;


■CLLocation呼び出し側メソッド
- (void)yobibashi {
// ロケーションマネージャ作成
if (nil == locationManager) {
locationManager = [[CLLocationManager alloc] init];
}
locationManager.delegate = self; // デリゲート設定
locationManager.desiredAccuracy = kCLLocationAccuracyBest; // 位置測定の望みの精度を設定
locationManager.distanceFilter = kCLDistanceFilterNone; // 位置情報更新の目安距離

// 現在地情報受信開始
[locationManager startUpdatingLocation];

}



■Locationデータ取得成功時
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
// 位置情報を取り出す
longitude = newLocation.coordinate.longitude;
latitude = newLocation.coordinate.latitude;

}
didUpdateToLocationメソッドは、Locationのデータがアップデートした際に呼ばれるので、複数回呼ばれることがある。従って、このメソッドの後続処理で画面遷移などを行う場合は、アップデート通知を1回のみにする必要がある。その実装は、locationManagerメソッド内でstopUpdatingLocationを呼び出せばよい。
[locationManager stopUpdatingLocation];



■Locationデータ取得失敗時
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"エラー" message:@"位置情報が取得できませんでした。" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alertView show];
[alertView release];

}

■参考記事:
http://sites.google.com/a/gclue.jp/iphone-app-docs/iphoneapurinyuumon--gps
http://journal.mycom.co.jp/column/iphone/015/index.html
http://blog.cypher-works.com/?p=732
http://moyashi.air-nifty.com/hitori/2008/07/iphonesafari_go_f6a2.html
 


iPhoneで取得できる緯度経度は世界測地系(WGS84)。
日本測地系に変換する場合は、それほどの精度が必要でなければ近似値を出す簡単な変換式によって行う。
// 緯度経度を世界測地系(WGS84)から日本測地系に変換
double latitude_tokyo = latitude + 0.00010696 * latitude - 0.000017467 * longitude - 0.0046020;
double longitude_tokyo = longitude + 0.000046047 * latitude + 0.000083049 * longitude - 0.010041;

■参考記事
http://groups.google.com/group/Google-Maps-API-Japan/browse_thread/thread/d0ce529ce20edc4d/285aac6e0d3497a1
 
タグ:iPhone
【CLLocation 現在位置情報の最新記事】
posted by mobileDeveloper at 16:25 | Comment(0) | TrackBack(0) | CLLocation 現在位置情報 はてなブックマーク - CLLocationで現在位置を取得する | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/128902019
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
Apple、Appleのロゴ、App Store、iPodのロゴ、iTunesは、米国および他国のApple Inc.の登録商標です。
iPhone、iPod touch、iPadはApple Inc.の商標です。
iPhone商標は、アイホン株式会社のライセンスに基づき使用されています。
その他、本ブログに記載されている製品名、会社名は、それぞれ各社の商標または登録商標です。