地図を追加する

このトピックでは、Maps SDK for Android を使用するようプロジェクトを設定した後で、Android アプリに基本の地図を追加する方法について説明します。地図を追加したら、地図のタイプと対象物を変更することができます。

概要

Maps SDK for Android には、地図のライフサイクル、機能、データの管理に使用できるクラスがあります。これらのクラスは、Android UI モデルに基づくユーザー インタラクションをサポートします。たとえば、地図の初期状態を設定したり、ランタイムにユーザーによる操作入力に応答したりすることが含まれます。

地図を処理するメイン インターフェースとクラス:

  • GoogleMap - 地図の基本的な対象物とデータを管理するエントリ ポイント。アプリから GoogleMap オブジェクトにアクセスするには、このオブジェクトをまず SupportMapFragment または MapView オブジェクトから取得する必要があります。

  • SupportMapFragment - GoogleMap オブジェクトのライフサイクルを管理するフラグメント

  • MapView - GoogleMap オブジェクトのライフサイクルを管理するビュー

  • OnMapReadyCallback - GoogleMap オブジェクトのイベントとユーザー インタラクションを処理するコールバック インターフェース。

GoogleMap オブジェクトは、以下の操作を自動的に行います。

  • Google マップサービスに接続する。
  • 地図タイルをダウンロードする。
  • タイルをデバイスの画面に表示する。
  • 移動やズームといった各種コントロールを表示する。
  • パン操作やズーム操作に対し、地図の移動やズームインまたはズームアウトで応答する。

アプリで GoogleMap オブジェクトを使用するには、地図のコンテナ オブジェクトとして SupportMapFragment または MapView オブジェクトを使用し、そのコンテナから GoogleMap オブジェクトを取得する必要があります。コンテナクラスは Android のフラグメントまたはビューから派生するため、Android の基底クラスが持つライフサイクルの管理と UI の機能を地図に提供することができます。SupportMapFragment クラスは、GoogleMap オブジェクトで一般的に使用される新しいコンテナです。

コードを表示する

次のコードは、このトピックで使用される Java アクティビティのコードであり、フラグメントを静的に追加しています。この Android プロジェクトは Empty プロジェクト テンプレートから作成され、プロジェクト設定ガイドの手順に沿って更新されています。このトピックの手順を実施すると、使用するプロジェクト テンプレートによっては以下のコードと異なることがあります。

  package com.example.mapsetup;

  import androidx.appcompat.app.AppCompatActivity;

  import android.os.Bundle;

  import com.google.android.gms.maps.GoogleMap;
  import com.google.android.gms.maps.OnMapReadyCallback;
  import com.google.android.gms.maps.SupportMapFragment;
  import com.google.android.gms.maps.model.LatLng;
  import com.google.android.gms.maps.model.MarkerOptions;

  // Implement OnMapReadyCallback.
  public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          // Set the layout file as the content view.
          setContentView(R.layout.activity_main);

          // Get a handle to the fragment and register the callback.
          SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                  .findFragmentById(R.id.map);
          mapFragment.getMapAsync(this);

      }

      // Get a handle to the GoogleMap object and display marker.
      @Override
      public void onMapReady(GoogleMap googleMap) {
          googleMap.addMarker(new MarkerOptions()
                  .position(new LatLng(0, 0))
                  .title("Marker"));
      }
  }

地図を追加するには

このセクションでは、基本の地図を追加する方法について説明します。ここでは、地図のコンテナとしてフラグメントを使用しますが、フラグメントの代わりにビューを使用することもできます。ビューを使用する例については、GitHub の RawMapViewDemoActivity をご覧ください。

基本的な手順は、以下のとおりです。

  1. 始める前に: プロジェクト設定ガイドの手順を完了し、Maps SDK for Android を使用するようプロジェクトが設定されていることを確認してください。

  2. 地図を処理するアクティビティに SupportMapFragment オブジェクトを追加します。フラグメントは静的または動的に追加できます。

  3. OnMapReadyCallback インターフェースを実装します。

  4. レイアウト ファイルをコンテンツ ビューとして設定します。

  5. フラグメントを静的に追加した場合は、フラグメントに対するハンドルを取得します。

  6. コールバックを登録します。

  7. GoogleMap オブジェクトへのハンドルを取得します。

SupportMapFragment オブジェクトを追加する

SupportMapFragment オブジェクトは、静的または動的にアプリに追加できます。簡単なのは、静的に追加する方法です。フラグメントを動的に追加すると、ランタイムにフラグメントに対して追加の操作(削除、置換など)を行うことができます。

静的にフラグメントを追加するには

地図を処理するアクティビティのレイアウト ファイルで以下の手順を行います。

  1. fragment 要素を追加します。
  2. 名前宣言 xmlns:map="http://schemas.android.com/apk/res-auto" を追加します。これにより、mapsカスタム XML 属性を使用できるようになります。
  3. fragment 要素で、android:name 属性を com.google.android.gms.maps.SupportMapFragment に設定します。
  4. fragment 要素で、android:id 属性を追加し、この属性を R.id.map リソース ID@+id/map)に設定します。

fragment 要素を含む完全なレイアウト ファイルの例を以下に示します。

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

動的にフラグメントを追加するには

アクティビティで以下の操作を行います。

  1. SupportMapFragment インスタンスを作成します。
  2. フラグメントをアクティビティに追加するトランザクションをコミットします。詳しくは、フラグメント トランザクションをご覧ください。

例:

Java

SupportMapFragment mapFragment = SupportMapFragment.newInstance();
getSupportFragmentManager()
    .beginTransaction()
    .add(R.id.my_container, mapFragment)
    .commit();
      

Kotlin

val mapFragment = SupportMapFragment.newInstance()
supportFragmentManager
    .beginTransaction()
    .add(R.id.my_container, mapFragment)
    .commit()
      

OnMapReadyCallback インターフェースを実装する

アクティビティの宣言を次のように更新します。

Java

class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
    // ...
}
      

Kotlin

class MainActivity : AppCompatActivity(), OnMapReadyCallback {

    // ...
}
      

コンテンツ ビューを設定する

アクティビティの onCreate メソッドで、setContentView メソッドを呼び出し、レイアウト ファイルをコンテンツ ビューとして設定します。

たとえば、レイアウト ファイルの名前が main.xml である場合は、以下のようになります。

Java

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}
      

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)
}
      

フラグメントに対するハンドルを取得し、コールバックを登録する

  1. フラグメントに対するハンドルを取得するには、FragmentManager.findFragmentById メソッドを呼び出して、レイアウト ファイルに含まれているフラグメントのリソース ID を渡します。フラグメントを動的に追加している場合は、ハンドルをすでに取得しているため、この手順を省略してください。

  2. getMapAsync メソッドを呼び出して、フラグメントにコールバックを設定します。

フラグメントを静的に追加している場合は、以下の例のようになります。

Java

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
    .findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
      

Kotlin

val mapFragment = supportFragmentManager
    .findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)
      

GoogleMap オブジェクトに対するハンドルを取得する

GoogleMap オブジェクトに対するハンドルを取得するには、onMapReady コールバック メソッドを使用します。ユーザー入力を受け入れる地図の準備が整うと、コールバックがトリガーされます。これにより、null ではない GoogleMap クラスのインスタンスが提供されます。地図を更新する際には、このインスタンスを使用します。

次の例では、onMapReady コールバックによって GoogleMap オブジェクトに対するハンドルを取得し、地図にマーカーを追加しています。

Java

@Override
public void onMapReady(GoogleMap googleMap) {
    googleMap.addMarker(new MarkerOptions()
        .position(new LatLng(0, 0))
        .title("Marker"));
}
      

Kotlin

override fun onMapReady(googleMap: GoogleMap) {
    googleMap.addMarker(
        MarkerOptions()
            .position(LatLng(0.0, 0.0))
            .title("Marker")
    )
}
      


Null 島にマーカーが配置された地図のスクリーンショット。

アプリのビルドと実行が正常に完了すると、Null 島(緯度および経度が 0 度)の上にマーカーを配置した地図が表示されます。

アクティビティのコードの全文をご確認ください。

アクティビティのコードを表示


次のステップ

このトピックの手順を完了したら、地図の設定に移ることができます。