Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
実践:GeoKit と iPhone で作る位置情報アプリケーション(中編) - Cirius Lab. ブログ
[go: Go Back, main page]

実践:GeoKit と iPhone で作る位置情報アプリケーション(中編)

本記事は、WEB+DB PRESS Vol. 57 内の特集、「スマートフォンでもケータイでも![速習]位置情報サービス」のボツ原稿をリライトしたものです。
特集の方では、この原稿の代わりに、PostGIS をふんだんに使った実践編を書き下ろしました。その他にも、ケータイ/スマートフォン向けに位置情報アプリケーションを作るための情報が盛り込まれた特集になっています。詳細については前のエントリをご確認ください。

※DB+PRESS 掲載前のボツ原稿のため、細かい部分の推敲はできておりません。ソースコード等におかしなところがあったらツイッターアカウントhal_skまで教えていただければ幸いです。

前編はこちら→実践:GeoKit と iPhone で作る位置情報アプリケーション (前編)
後編はこちら→実践:GeoKit と iPhone で作る位置情報アプリケーション (後編)

iPhone アプリケーションを作成する

前編では、Yahoo! ワイワイマップのPOIデータを緯度経度で検索し、JSON形式で出力できるRailsアプリケーションを作成しました。今度は、そのデータを表示するための iPhone アプリケーションを作成します。
XCode を起動し、新規のアプリケーションを作成します。

アプリケーション作成

新規プロジェクトを作成し、Navigation-based Application を選択します。 プロジェクト名は WaiwaiView としました。 new_project.png new_project2.png

マップ一覧の実装

まずは、現在あるマップの一覧を取得して、リストへ表示しましょう。 JSON 形式のデータをパースするために、JSON Framework を利用することとします。
http://code.google.com/p/json-framework/ より、dmg ファイルをダウンロードします。執筆時点での最新、JSON_2.2.3.dmg をダウンロードしました。

ダウンロードした dmg ファイルをマウントするといくつかフォルダがありますが、JSON フォルダを XCode の「グループとファイル」へドラッグドロップします。 その際に出てくるウィンドウで、「ディスティネーショングループのフォルダに項目をコピーする」のチェックを入れ、追加ボタンを押します。

add_resource.pngadd_resources2.png
追加されました。

リストを表示するためには、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
ビルドすると、マップ名が表示されるようになったと思います。

view_map.png

地図の表示

さて、このマップをクリックしたら、地図が表示されるように変更しましょう。

地図を表示するための ViewController を追加します。Classes フォルダを右クリックし、新規ファイルを追加します。 add_framework.png

ファイルの種類は、UIViewController subclass にします。オプションは選択しません。

3-2-3-2.png

ファイル名は WaiwaiMapViewController としました。

3-2-3-3.png

Frameworks を右クリックし、CoreLocation 及び MapKit フレームワークを追加します。

3-2-3-4.png 3-2-3-5.png

WaiwaiMapViewController.m にて、

を追加します。

RootViewController から WaiwaiMapViewController を呼び出すため、import と 変数を追加します。

RootViewController.h

マップ名をクリックした際にマップビューを呼び出すようにします。

RootViewController.m

WaiwaiMapViewController から、地図を表示できるように変更します。

WaiwaiMapViewController.h
WaiwaiMapViewController.m

ビルドして、マップ名をクリックすると地図が表示されるようになったと思います。 シミュレータ上では、現在地は常にApple本社が表示されてしまうので、アップルにいることになってしまいます。実機で試すと、現在地が取得できます。
(iPhone SDK 4 beta 2 より、シミュレータでも現在地が取得できるようになりました。)

地図上に Pin を表示する

これではただ地図が表示されるだけですので、マップ内のアイテムを Pin で表示してみましょう。

Pin を表示するためには、MKAnnotation protocol を実装したオブジェクトを作る必要があります。 新規ファイルを追加し、NSObject を継承した MapAnnotation クラスを作成します。
作成したオブジェクトに MKAnnotaion protocol の定義を加えましょう。 MKAnnotation は地図上にオブジェクトを配置するためのプロトコルで、 coordinate プロパティ、title プロパティ、subtitle プロパティを定義することが可能です。 coordniate プロパティ以外は必須ではありませんが、今回は全て利用します。

MyAnnotation.h

ワイワイマップのデータをサーバから取得して 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

実行すると、地図が渋谷に変更され、ピンが表示されるはずです。 ピンをタップすると、詳細の一部が表示されます。

3-2-4-1.png
長くなってしまったので、ここまでを中編として、後編へ続く。。。

トラックバック(0)

このブログ記事を参照しているブログ一覧: 実践:GeoKit と iPhone で作る位置情報アプリケーション(中編)

このブログ記事に対するトラックバックURL: http://lab.cirius.co.jp/blog/cgi-bin/mt-tb.cgi/62