2010年3月2日火曜日

CoreLocationを試す

追記 2010/03/03: ScrollViewはいらなかったねw.



動機:
この記事を読んだ.
Snow Leopard で Core Location Framework が使える
MOONGIFT: » Snow Leopard向け。位置情報取得デモ「whereami」:オープンソースを毎日紹介

ここにコードがあるらしい.
victor’s whereami at master - GitHub http://github.com/victor/whereami

ということでやってみる.

やったこと1:
とりあえずまねる.
1. MacPortsでgitをいれる.
$ sudo port install git-core

2. download
$ git clone git://github.com/victor/whereami.git

3. Xcodeプロジェクトを起動
 whereamiフォルダのwhereami.xcodeprojをダブルクリック.
4. ビルドと実行

5. 実行内容について
 こちらを参照のこと.
MOONGIFT: » Snow Leopard向け。位置情報取得デモ「whereami」:オープンソースを毎日紹介


やったこと2:
WebViewと連携させてみよう.
1.CocoaProject(Sample_CoreLocation)を作成.
1.1作成する.
1.2プロジェクトに既存のフレームワークを追加する.
 WebKit.framework,CoreLocation.frameworkを追加する.
 こんな感じになるはず.

2.コード
Sample_CoreLocationAppDelegate.h

#import <Cocoa/Cocoa.h>
#import <WebKit/WebKit.h>
#import <CoreLocation/CoreLocation.h>

@interface Sample_CoreLocationAppDelegate : NSObject <NSApplicationDelegate, CLLocationManagerDelegate>
{
NSWindow *window;
WebView *webView;
CLLocationManager * manager;
}

@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet WebView *webView;

- (void)_requestMapWithLa:(float)la
ln:(float)ln;
@end

Sample_CoreLocationAppDelegate.m

#import "Sample_CoreLocationAppDelegate.h"

@implementation Sample_CoreLocationAppDelegate

@synthesize window;
@synthesize webView;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(webViewProgressFinished:)
name:WebViewProgressFinishedNotification
object:nil];

manager = [[CLLocationManager alloc] init];
[manager setDelegate:self];
[manager startUpdatingLocation];
}
- (void)webViewProgressFinished:(NSNotification*)notification
{
NSLog(@"finished");
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
[self _requestMapWithLa:newLocation.coordinate.latitude
ln:newLocation.coordinate.longitude];
}
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error
{
NSLog(@"%@: %@",[error localizedDescription],
[error localizedFailureReason]);
[self _requestMapWithLa:35. ln:135.];
}
- (void)_requestMapWithLa:(float)la
ln:(float)ln
{
NSString *format= @"http://maps.google.co.jp/maps?q=%f,%f&output=embed";
NSString *urlString= [NSString stringWithFormat:format,la,ln];
NSURL *URL= [NSURL URLWithString:urlString];
[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:URL]];
}
@end

3.InterfaceBuilderでMainMenu.xibを料理
3.1WindowイッパイになるようにScrollViewを貼り,その中に同様にWebViewを貼る.
 それぞれInspectorのSizeタブ内のAutosizingで領域イッパイになるようにしておく.
3.2Sample Core Location App DelegateのOutletにWebViewを登録する.
4.実行
4.1ダイアログで利用を聞かれる.

4.2'許可しない'を選ぶ又はエラーなら緯度35,経度135にしてGoogleMapを呼び出す.

4.3'OK'を選ぶと求められた位置でGoogleMapを呼び出す.
format中の'&output=embed'がなければ通常の表示.

0 件のコメント: