実践:GeoKit と iPhone で作る位置情報アプリケーション(中編)
特集の方では、この原稿の代わりに、PostGIS をふんだんに使った実践編を書き下ろしました。その他にも、ケータイ/スマートフォン向けに位置情報アプリケーションを作るための情報が盛り込まれた特集になっています。詳細については前のエントリをご確認ください。
※DB+PRESS 掲載前のボツ原稿のため、細かい部分の推敲はできておりません。ソースコード等におかしなところがあったらツイッターアカウントhal_skまで教えていただければ幸いです。
前編はこちら→実践:GeoKit と iPhone で作る位置情報アプリケーション (前編)後編はこちら→実践:GeoKit と iPhone で作る位置情報アプリケーション (後編)
iPhone アプリケーションを作成する
前編では、Yahoo! ワイワイマップのPOIデータを緯度経度で検索し、JSON形式で出力できるRailsアプリケーションを作成しました。今度は、そのデータを表示するための iPhone アプリケーションを作成します。
XCode を起動し、新規のアプリケーションを作成します。
アプリケーション作成
新規プロジェクトを作成し、Navigation-based Application を選択します。 プロジェクト名は WaiwaiView としました。マップ一覧の実装
まずは、現在あるマップの一覧を取得して、リストへ表示しましょう。
JSON 形式のデータをパースするために、JSON Framework を利用することとします。
http://code.google.com/p/json-framework/
より、dmg ファイルをダウンロードします。執筆時点での最新、JSON_2.2.3.dmg
をダウンロードしました。
ダウンロードした dmg ファイルをマウントするといくつかフォルダがありますが、JSON フォルダを XCode の「グループとファイル」へドラッグドロップします。 その際に出てくるウィンドウで、「ディスティネーショングループのフォルダに項目をコピーする」のチェックを入れ、追加ボタンを押します。
追加されました。
リストを表示するためには、http://#{前編でセットアップしたサーバ}/map/ から取得できるJSONをパースし、一覧へ表示します。 まずは RootViewController.m の先頭に、
を追加して、JSON ライブラリを利用できるようにします。また、RootViewController.h に、マップ一覧を格納するための変数定義を追加します。
RootViewController.h 不要になったメモリを開放するため、dealloc へ release を追加しておきます。 RootViewController.h その後、RootViewController.m の - (void)viewDidLoad メソッドのコメントアウトを外し、以下のコードを追加します。 RootViewController.m これで、maps 変数に map データの一覧が入っているはずです。この maps の内容をリストビューへ表示するためのメソッドを追加します。 RootViewController.h RootViewController.h ビルドすると、マップ名が表示されるようになったと思います。
地図の表示
さて、このマップをクリックしたら、地図が表示されるように変更しましょう。地図を表示するための ViewController を追加します。Classes フォルダを右クリックし、新規ファイルを追加します。
ファイルの種類は、UIViewController subclass にします。オプションは選択しません。
ファイル名は WaiwaiMapViewController としました。
Frameworks を右クリックし、CoreLocation 及び MapKit フレームワークを追加します。
WaiwaiMapViewController.m にて、
を追加します。RootViewController から WaiwaiMapViewController を呼び出すため、import と 変数を追加します。
RootViewController.hマップ名をクリックした際にマップビューを呼び出すようにします。
RootViewController.mWaiwaiMapViewController から、地図を表示できるように変更します。
WaiwaiMapViewController.h WaiwaiMapViewController.m
ビルドして、マップ名をクリックすると地図が表示されるようになったと思います。
シミュレータ上では、現在地は常にApple本社が表示されてしまうので、アップルにいることになってしまいます。実機で試すと、現在地が取得できます。
(iPhone SDK 4 beta 2 より、シミュレータでも現在地が取得できるようになりました。)
地図上に Pin を表示する
これではただ地図が表示されるだけですので、マップ内のアイテムを Pin で表示してみましょう。
Pin を表示するためには、MKAnnotation protocol を実装したオブジェクトを作る必要があります。
新規ファイルを追加し、NSObject を継承した MapAnnotation クラスを作成します。
作成したオブジェクトに MKAnnotaion protocol の定義を加えましょう。
MKAnnotation は地図上にオブジェクトを配置するためのプロトコルで、
coordinate プロパティ、title プロパティ、subtitle プロパティを定義することが可能です。
coordniate プロパティ以外は必須ではありませんが、今回は全て利用します。
ワイワイマップのデータをサーバから取得して MapAnnotation のインスタンスに格納し、MapView に表示する処理を行います。
MapAnnotaion.h と JSON.h の import を追加WaiwaiMapViewController.m MapID 用の変数と Annotaion 格納用の配列、ロード用の関数定義を追加します・ WaiwaiMapViewController.h 配列の初期化処理を追加します。 WaiwaiMapViewController.m retain しているので、release も忘れずに追加します。 緯度経度を設定する処理と、その緯度経度と mapId を元にAnnotaion をロードする関数定義を追加します。 RootViewController から、waiwaiMapId を渡すように変更します。
RootViewController.m テスト用として、WaiwaiMapViewController の初期化時に渋谷の緯度経度を設定するようにしておきます。
WaiwaiMapViewController.m viewDidLoad 時に、loadAnnotations を呼び出すようにしておきます。 WaiwaiMapViewController.m
実行すると、地図が渋谷に変更され、ピンが表示されるはずです。 ピンをタップすると、詳細の一部が表示されます。
長くなってしまったので、ここまでを中編として、後編へ続く。。。
トラックバック(0)
このブログ記事を参照しているブログ一覧: 実践:GeoKit と iPhone で作る位置情報アプリケーション(中編)
このブログ記事に対するトラックバックURL: http://lab.cirius.co.jp/blog/cgi-bin/mt-tb.cgi/62
- Cirius Lab.内リンク
- ラボトップ
- Geo Platform API
- ジオメディアサービス
- 最近のブログ記事
- スマートフォン勉強会で、iPhone のバックグラウンド測位についてお話しました。
- 第6回ジオメディアサミット開催いたしました。
- 実践:GeoKit と iPhone で作る位置情報アプリケーション(後編)
- 実践:GeoKit と iPhone で作る位置情報アプリケーション(中編)
- 実践:GeoKit と iPhone で作る位置情報アプリケーション(前編)
- WEB+DB プレスで、位置情報サービスの特集を書きました
- 7/30(金) ジオメディアサミット名古屋
- 機は熟した。ジオメディアが今熱い:第5回ジオメディアサミット開催しました。
- 第5回ジオメディアサミット、ライトニングトーク登壇者決定!
- 第5回ジオメディアサミットライトニングトーク枠争奪バトル