sos の 作業メモ

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

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

その11: SDK Demos (Google Maps SDK for iOS)

前回の続き

ではSDKDemosのソースを眺めていきます。

ストリートビュー関連を除いて、 1.2.1や1.3.0の記事からそれほど大きくは変わっていないようです。

デモアプリのbuild

DemoプロジェクトのBundleIDを適宜変更して、 APIKey.hにAPI Consoleで作成したAPI Keyを設定してやればbuildが可能です。 Targetを5.1にすれば5.1でも動きます。

構造

全体の構造は、デモ一覧のTableViewとデモ画面の Master-Detail。

SDKDemosAppDelegate.mの didFinishLaunchingWithOptions:の中でAPI Keyの設定の有無のチェックと、GMSServicesの初期化を行っています。

Samples.mの中には、デモ用のタイトルと呼び出されるViewControllerのクラスが定義されてます。

Map Demos

Basic Map

デフォルトのGMSMapViewがぺろんと貼ってあるだけのデモ。スクロール、ズーム、ティルト、回転と、ジェスチャによる操作は可能なので、これだけでもちゃんとしたGoogleMapsアプリになります。

- (void)viewDidLoad {
    [super viewDidLoad];
    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868 longitude:151.2086 zoom:6];
    self.view = [GMSMapView mapWithFrame:CGRectZero camera:camera];
}

Map Types

UISegmentedControl でノーマル/ハイブリッド/衛星写真/地形図の4種類を切り替えるデモ

Traffic Layer

Basic Mapに、GMSMapView.trafficEnabled = YESを追加しただけのデモ。これだけで道路の混雑状況がレイヤー表示されます。

My Location

GPSなどで位置情報を取得し、それをマップの中心に表示し続けられるデモ。

コンパスとMyLocationボタンの表示をonにし、myLocationEnabled = YES、位置情報の更新のイベントをKVOパターンで取得する形になってます。

myLocationEnabled をYESにするのに、GCDで遅延実行させるのはなかなかよい考え。

dispatch_async(dispatch_get_main_queue(), ^{
    mapView_.myLocationEnabled = YES;
});

Indoor

サンフランシスコのモスコーニセンターの屋内平面図を表示するデモ。セレクタで1F-3Fの表示も切り替えられる。

myLocationボタンを出すより、コンパスをonにした方が良い気がする。

Indoor with Custom Level Select

上のIndoorで、GoogmeMapsのFloorPickerをUIPickerViewで代用するデモ。

mapView_.settings.indoorPicker = NO;

でFloorPickerコントロールをdisableにし、代わりにUIPickerViewを追加している。 GMSIndoorDisplayDelegateの使い方の参考にもなる。

Gesture Control

ピンチによるズームジェスチャのon/offをプログラムから切り替えるデモ

Panorama

Street View

ニューヨーク近代美術館の前のStreetViewのデモ。

panoramaView:didMoveToPanorama:の中で、最初にPanoramaが表示された時に、美術館にマーカーを立てる処理も行っている。

Fixed Street View

カメラの向きが固定されたStreetViewのデモ

view_.orientationGestures = NO;
view_.navigationGestures = NO;
view_.navigationLinksHidden = YES;

と、ズーム操作だけができる状態になっている。

Overlays

Markers

プログラムでシドニーとメルボルンのマーカーを表示するデモ。

シドニーのマーカーが選択された状態での初期表示となる。

Custom Markers

シドニーにデフォルト、メルボルンに指定画像のマーカーを表示するデモ。

+ボタンで画面内のランダムな場所にカスタムカラーの10個のマーカーを追加する機能も実装されている。

Marker Events

タップされたマーカーへカメラポジションを移動させるのと、自前のViewでInfoWindowを表示させるデモ

Polygons

ニューヨーク州ノースカロライナ州をポリゴンで塗り潰し表示するデモ。ポリゴンがタップされた時には色を変更する。

Polylines

シドニー、フィジー、ホノルル、マウンテンビューの間に、通常とgeodesicのポリーラインを表示するデモ。

Ground Overlays

ニューアークに古い地図の画像をオーバーレイ表示するデモ

Tile Overlay

モスコーニセンターの建物のフロアマップ(1F〜3F)をGMSTileLayerとして表示するデモ。上述のIndoorでサポートされていない建物はこれを使って平面図の表示が可能。

Camera

Fit Bounds

画面をロングタップしてマーカーを置いて行き、Fit Boundsボタンが押されたときに、全てのマーカーが画面内におさまるように自動でカメラを移動するデモ。

Camera Animation

NSTimerでカメラをグルグルと動かし続けるデモ。とても格好いい。

Map Layer

GMSMapViewのlayerプロパティにCABasicAnimationを追加して、表示中の場所からMyLocationの位置までアニメーションでカメラを移動させるデモ。

Services

Geocoder

マップ上のタップされた緯度経度からGeoCodingによって住所を問い合わせ、それをタイトルとスニペットにしたマーカーを作成するデモ

 


これで1.4.2のドキュメントとサンプルの解析も一通り完了です。