このトピックでは、iOS アプリに追加されている地図を Maps SDK for iOS を使用して設定する方法について説明します。
概要
アプリに地図を追加したら、地図の初期設定とランタイム設定を行うことができます。地図コンテナの追加について詳しくは、地図を追加するをご覧ください。
地図の初期設定には、以下の設定が含まれます。
- カメラの位置(場所、ズーム、方向、傾斜など)。カメラの位置指定について詳しくは、カメラとビューをご覧ください。
- 地図タイプ。
- 表示する UI コンポーネント(ズームボタンやコンパスなど)。
- 有効にする操作。
実行時に、これらの設定と追加設定を構成するには、GMSMapView
オブジェクトを更新します。
地図タイプ
地図は各種マップ タイプのいずれかを使用してカスタマイズできます。地図のタイプによって、地図の全体的な表示が決まります。たとえば、アトラスには通常、境界を示すことに重点を置いた政治地図や、都市や地域のすべての道路を示す道路地図が含まれます。Maps SDK for iOS では、次のタイプのマップを使用できます。
地図の種類 | |
---|---|
標準 | Value:
kGMSTypeNormal 通常の道路地図。道路、一部の人工対象物、川などの重要な自然対象物を表示します。道路や対象物のラベルも表示されます。
|
ハイブリッド | Value:
kGMSTypeHybrid 航空写真データに道路地図を加えたもの。道路や対象物のラベルも表示されます。 |
Satellite | Value:
kGMSTypeSatellite 航空写真データ。道路と対象物のラベルは表示されません。
|
地形 | Value:
kGMSTypeTerrain 地勢データ。この地図には、色、輪郭線とラベル、透過陰影が含まれます。一部の道路とラベルも表示されます。
|
なし | Value:
kGMSTypeNone マップ タイルなし。ベース マップ タイルは表示されません。このモードはタイルレイヤと組み合わせて使用すると便利です。地図の種類を「none」に設定すると、トラフィック データの表示が無効になります。 |
地図の種類を変更する
地図の種類を設定するには、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
ユーザーがズームインすると自動的に有効になり、ズームアウトするとフェードアウトします。
インドアマップを無効にするには、GMSMapView
の indoorEnabled
プロパティを NO
に設定します。
Swift
mapView.isIndoorEnabled = false
Objective-C
mapView.indoorEnabled = NO;
あるいは、フロア選択ツールのコントロールのみを無効にすることもできます。
フロアプランを追加する
構内図は一部の場所で利用できます。アプリケーションでハイライト表示したい建物について構内図のデータがない場合は、次のいずれかを行います。
- Google マップに直接構内図を追加します。作成したプランは、Google マップのすべてのユーザーが利用できるようになります。
- 構内図をグラウンド オーバーレイとして表示する。この場合、アプリケーションのユーザーのみが構内図を表示できます。
交通状況レイヤ
地図上に交通量情報を重ねて表示する機能を、ユーザーに提供することができます。これにより、ユーザーが地域の交通状況を視覚的に把握できるようになります。トラフィック レイヤのオンとオフを切り替えるには、trafficEnabled
メソッドを呼び出します。地図上に表示される交通状況レイヤの例を次に示します。
ユーザー補助
ユーザー補助要素はデフォルトでは地図上に表示されないようになっています。ユーザー補助機能を有効にするには、GMSMapView
の accessibilityElementsHidden
プロパティを NO
に設定します。これにより、オーバーレイ オブジェクト(GMSMarker
や情報ウィンドウGMSPolyline
など)に対してユーザー補助要素が生成されます。
Swift
mapView.accessibilityElementsHidden = false
Objective-C
mapView.accessibilityElementsHidden = NO;
このプロパティは、標準の UIAccessibility
プロトコルと同じですが、Maps SDK for iOS のデフォルト値は YES
です。
ユーザーのロケーション
デフォルトでは、地図に位置情報は表示されません。GMSMapView
で myLocationEnabled
を設定することで、青い「現在地」ドットとコンパスの方向を有効にすることができます。
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
プロパティを次のように設定します。
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;