sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

Google Maps SDK for iOS Ver.1.1.1 前編

Ver.1.1.2を触った記事はこちら


さて、年度内の仕事があっさりと終わって少し時間ができましたので、 いろいろ放置していたものを少し片付けてみようと思います。

まずは、先日試して地図が 表示されなかった Google Maps SDK for iOS。

今日試してみたら、表示されるようになってました。どうやらGoogle側の問題だった模様です。

f:id:sos_jp:20130321133744p:plain

と、これだけで終わってもつまらないので、まずは 3/11にリリースされた Ver.1.1.1を動かしてみます。

リリースノートには

  • Improved the messages that are logged to the console when a invalid key is used or a connection error occurs.
  • Added multi-line snippet support for GMSMarker.

ログメッセージの改善と、マーカーに複数行のsnippetをサポートと、あとはバグ修正とあります。

ということで、デモプロジェクトを見て行きます。

API Key

Generate New Key で作ってから、実際に地図が表示されるようになるまでに少し時間がかかるようです。慌てず騒がず、十分くらいは待ちましょう。

SDKDemosAppDelegate

まずはAPI KeyでGMSServicesを初期化。rootViewControllerにUISplitViewControllerを指定し、Master側にTableViewを持ったMasterViewController、Detailに、実際のサンプル画面であるMapSampleViewControllerとその派生クラスを割り当てる構造(全部で12種類)。 iPhoneの場合はDetail側はpushViewControllerで切り替えている。

MasterViewController

メインメニュー

f:id:sos_jp:20130322034322p:plain

Samples

MapSampleViewController

GMSMapViewのインスタンスを生成して地図を表示したり、NavigationBarの左ボタンを派生クラスにあわせて変えるための基本的な機能を提供する。単体でもスワイプによる中心座標の変更、PintchOpen/CloseでのZoomや回転、俯瞰の操作が可能。

UISettingSample

GMSMapViewのmyLocationEnabledをYESにして現在位置を地図上に表示。Zoom可否を操作するためのUISwitchを画面に追加し、GMSMapView.settings.zoomGestures の値を変化させている。

f:id:sos_jp:20130321231806p:plain

MapTypes

UISegmentedControlをNaviBarに追加し、ノーマル、衛星写真、ハイブリッド、地形図の4種類にGMSMapView.mapTypeの値を変化させている。

f:id:sos_jp:20130322002056p:plain

ResizeMapSample

GMSMapViewの大きさを変えるサンプル。 NaviBarにランダムでMapViewの大きさを縮めるボタンと、元の大きさ(frameいっぱい)に戻すボタンが追加されている。GMSMapView.frame に CGRectを設定するだけ。

f:id:sos_jp:20130322003006p:plain

GroundOverlaySample

マップの上に画像をオーバーレイ表示し、さらに回転アニメーションさせるサンプル。 GMSGroundOverlayOptionsのインスタンスにUIImageと座標とbearing(方向)とzoomを設定し、GMSMapViewにaddGroundOverLayWithOptions:で追加している。 また、NSTimerによって、30fps, 60deg/sでbearingを変化させている。

f:id:sos_jp:20130322003007p:plain

ProjectionSample

地図上の特定の座標に貼り付くようにViewを表示させるサンプル。

GMSMapViewのCameraが移動した際に、GMSProjectionオブジェクトを使う事で、経度緯度の座標値<->画面上のXY座標を計算しなおして、MapViewの上に重ねて置いたViewの位置を動かしている。

f:id:sos_jp:20130322003008p:plain


とりあえずここまででサンプルの半分。 iOSのMapKitや、AndroidGoogle MapsSDKを使った事があれば、説明が無くてもなんとなく理解できるものばかりのお手軽さです。

ちょっと疲れて来たので、残りは後編に分けます。