地図を設定する

プラットフォームを選択: Android iOS

このトピックでは、iOS アプリに追加されている地図を Maps SDK for iOS を使用して設定する方法について説明します。

概要

アプリに地図を追加したら、地図の初期設定とランタイム設定を行います。地図コンテナの追加について詳しくは、地図を追加するをご覧ください。

地図の初期設定には、以下の設定が含まれます。

ランタイムにこれらの設定や追加設定を行うには、GMSMapView オブジェクトを更新します。

地図のタイプ

地図は各種マップ タイプのいずれかを使用してカスタマイズできます。地図タイプは、地図の全体的な表現に適用されます。たとえば、アトラスには通常、境界を示すことに重点を置いた政治地図や、特定の都市や地域のすべての道路を表示する道路地図が含まれています。Maps SDK for iOS には、次のタイプの地図が用意されています。

地図の種類
標準
Value: kGMSTypeNormal
通常の道路地図。道路、人工の対象物、川などの重要な自然の対象物を表示します。道路ラベルと対象物ラベルも表示されます。
ハイブリッド
Value: kGMSTypeHybrid
航空写真データに道路地図を加えたもの。道路のラベルと対象物のラベルも表示されます。
Satellite
Value: kGMSTypeSatellite
航空写真データ。道路や対象物のラベルは表示されません。
地形
Value: kGMSTypeTerrain
地勢データ。この地図には、色、輪郭線とラベル、透視的な網かけが含まれています。一部の道路とラベルも表示されます。
なし
Value: kGMSTypeNone
マップ タイルなし。ベース マップ タイルは表示されません。このモードはタイルレイヤと組み合わせて使用すると便利です。地図の種類が「なし」の場合、トラフィック データの表示は無効になります。

地図タイプを変更する

地図の種類を設定するには、GMSMapView.mapType プロパティに新しい値を割り当てます。たとえば、航空写真マップタイプを表示するには、次のようにします。

Swift

let camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 6)
let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
mapView.mapType = .satellite
      

Objective-C

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:6];
GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView.mapType = kGMSTypeSatellite;
      

以下の選択ツールでは、同じ場所の地形、法線、ハイブリッドのマップを比較しています。

インドアマップ

Maps SDK for iOS では、ズームレベルが大きくなると、空港、ショッピング モール、大規模小売店、乗り換え駅といった屋内空間の構内図が表示されます。インドアフロア プランは、地図タイプ(kGMSTypeNormal)のデフォルトの地図タイルに統合されており、ユーザーがズームインすると自動的に有効になり、地図が縮小されると自動的に非表示になります。

インドアマップを無効にするには、GMSMapViewindoorEnabled プロパティを NO に設定します。

Swift

mapView.isIndoorEnabled = false
      

Objective-C

mapView.indoorEnabled = NO;
      

あるいは、階数ピッカー コントロールだけを無効にすることもできます。

構内図を追加する

構内図は一部の場所で利用できます。アプリケーションでハイライト表示したいビルディングの構内図データを利用できない場合は、以下を行うことができます。

  • Google マップに直接構内図を追加します。これにより、Google マップのすべてのユーザーがプランを利用できるようになります。
  • 構内図をグラウンド オーバーレイとして表示する。この場合、アプリケーションのユーザーのみが構内図を表示できます。

交通状況レイヤ

地図上に交通量情報を重ねて表示する機能を、ユーザーに提供することができます。これにより、ユーザーが地域の交通状況を視覚的に把握できるようになります。トラフィック レイヤのオンとオフを切り替えるには、trafficEnabled メソッドを呼び出します。地図上に表示される交通状況レイヤの例を次に示します。

Google マップに表示される交通状況レイヤ

ユーザー補助

ユーザー補助要素はデフォルトでは地図上に表示されないようになっています。ユーザー補助を有効にするには、GMSMapViewaccessibilityElementsHidden プロパティを NO に設定します。これにより、オーバーレイ オブジェクト(GMSMarker や情報ウィンドウ、GMSPolyline など)のユーザー補助要素が生成されます。

Swift

mapView.accessibilityElementsHidden = false
      

Objective-C

mapView.accessibilityElementsHidden = NO;
      

このプロパティは、カジュアルな UIAccessibility プロトコルに基づいていますが、Maps SDK for iOS のデフォルト値は YES です。

現在地

デフォルトでは、位置情報は地図に表示されません。青い「現在地」機能を有効にするには、GMSMapViewmyLocationEnabled を設定して、ドットとコンパスの方向を設定します。

Swift

mapView.isMyLocationEnabled = true
      

Objective-C

mapView.myLocationEnabled = YES;
      

この機能を有効にすると、myLocation プロパティを通じてユーザーの現在地も検索できるようになります。このプロパティをすぐに利用できない場合があります。たとえば、このデータへのアクセスをユーザーに許可するよう iOS から求められた場合です。この場合、nil になります。

Swift

print("User's location: \(String(describing: mapView.myLocation))")
      

Objective-C

NSLog(@"User's location: %@", mapView.myLocation);
      

利用規約から

ユーザーのプライバシーを保護
ユーザーに最新情報を提供

ユーザーには、ユーザーデータがどのように使用されるかと、個人を特定できる方法でそれらが使用されないことを必ず通知します。ユーザーの位置情報は本人の同意を得たうえで使用し、ユーザーがいつでも同意を取り消せるようにしてください。

詳細

3D の建物

多くの都市は、拡大すると 3D の建物が表示されます。以下のワシントン州シアトルの画像でもわかります。

ワシントン州シアトルの建物の 3D マップ。

以下のように、Swift または Objective-C で対応する GMSMapView プロパティを設定することで、3D の建物を無効にできます。

Swift

mapView.isBuildingsEnabled = false
      

Objective-C

[mapView setBuildingsEnabled:NO];
      

地図のパディング

Google マップは、GMSMapView で定義されたリージョン全体を埋めるように設計されています。地図の外観と動作のいくつかは、ビューのサイズによって定義されます。

  • カメラの位置は、パディングされた領域の中心が対象となります。
  • 地図のコントロールは、地図の端からの相対的な位置に配置されます。
  • 著作権に関する通知や Google ロゴなどの法的情報は、地図の下端に沿って表示されます。

地図の周囲にパディングを追加するには、GMSMapView.padding プロパティ。地図は引き続きコンテナ全体に表示されますが、テキストとコントロールの位置、地図の操作、カメラの移動は、より小さい地図に対して行われているかのようになります。このため、次のような変化が生じます。

  • API 呼び出しやボタンのタップ(コンパス、現在地など)によるカメラの移動は、パディングが追加された領域に対して相対的に行われます。
  • GMSMapView.projection は、パディングされた領域のみを含む投影を返します。
  • UI コントロールは、指定されたポイント数だけコンテナのエッジからオフセットされます。

地図の一部に重ねて表示される UI を設計する際は、パディングが役立ちます。たとえば、以下の画像では、地図の上部と右側にパディングが追加されています。地図のコントロールと法的テキストは、パディングされた領域(緑色で表示)の端に沿って表示されますが、地図は引き続きコンテナ全体(青色で表示)に表示されます。この例では、メニューを地図の右側にフローティングして、地図のコントロールが隠れないにようすることができます。

地図のパディング

地図にパディングを追加するには、UIEdgeInsets オブジェクトを作成して GMSMapView に渡します。padding プロパティ

Swift

// Insets are specified in this order: top, left, bottom, right
let mapInsets = UIEdgeInsets(top: 100.0, left: 0.0, bottom: 0.0, right: 300.0)
mapView.padding = mapInsets
      

Objective-C

// Insets are specified in this order: top, left, bottom, right
UIEdgeInsets mapInsets = UIEdgeInsetsMake(100.0, 0.0, 0.0, 300.0);
mapView.padding = mapInsets;