アプリに 3D 地図を追加する

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

ニューヨーク市を示す 3D 地図

このページでは、Maps 3D SDK for Android を使用して Android アプリに基本的な 3D 地図を追加する方法の例について説明します。このページの手順では、設定ページの手順がすでに完了しており、次のものが用意されていることを前提としています。

  • Maps 3D SDK for Android が有効になっている Google Cloud プロジェクト
  • Maps 3D SDK for Android で使用するように構成された API キー
  • Maps 3D SDK for Android で使用するように設定された Android Studio プロジェクト

これらの前提条件の詳細については、セットアップをご覧ください。

パート 1: レイアウト ファイル(activity_main.xml)を更新して Map3DView コンポーネントを追加する

Map3DView コンポーネントは、アプリ内で 3D 地図をレンダリングするビューです。次の手順では、コンポーネントを追加し、カメラの位置や関連する属性など、地図の初期状態を設定します。

  1. メイン アクティビティのレイアウト ファイルを開きます。通常は app/src/main/res/layout/activity_main.xml にあります。

  2. ルート ConstraintLayout(またはルート レイアウト要素)に、map3d XML 名前空間を追加します。

    xmlns:map3d="http://schemas.android.com/apk/res-auto"
    
  3. 「Hello World!」と表示されるデフォルトの <TextView> を削除します。

  4. Map3DView コンポーネントをレイアウトに追加します。カメラの位置やその他の属性をカスタマイズできます。

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:map3d="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"
      android:id="@+id/main"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      tools:context=".MainActivity">
    
      <com.google.android.gms.maps3d.Map3DView
        android:id="@+id/map3dView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        map3d:mode="hybrid"
        map3d:centerLat="38.544012"
        map3d:centerLng="-107.670428"
        map3d:centerAlt="2427.6"
        map3d:heading="310"
        map3d:tilt="63"
        map3d:range="8266"
        map3d:roll="0"
        map3d:minAltitude="0"
        map3d:maxAltitude="1000000"
        map3d:minHeading="0"
        map3d:maxHeading="360"
        map3d:minTilt="0"
        map3d:maxTilt="90"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
    

パート 2: MainActivity.kt を更新する

次の手順では、パート 1 の activity_main.xml ファイルに追加された Map3DView コンポーネントを初期化し、コンポーネントのライフサイクル イベントを管理します。

  1. 通常 app/src/main/java/com/example/yourpackagename/MainActivity.kt にある MainActivity.kt ファイルを開きます。

  2. Maps 3D SDK for Android に必要なインポートを追加します。

    import com.google.android.gms.maps3d.GoogleMap3D
    import com.google.android.gms.maps3d.Map3DView
    import com.google.android.gms.maps3d.OnMap3DViewReadyCallback
    
  3. MainActivity クラスを変更して OnMap3DViewReadyCallback を実装します。

    class MainActivity : AppCompatActivity(), OnMap3DViewReadyCallback {
    
  4. Map3DViewGoogleMap3D の変数を宣言します。

    private lateinit var map3DView: Map3DView
    private var googleMap3D: GoogleMap3D? = null
    
  5. onCreate メソッドで、setContentView(...)ViewCompat.setOnApplyWindowInsetsListener ブロックの後に、map3DView を初期化し、その onCreate ライフサイクル メソッドを呼び出し、地図を非同期でリクエストします。

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
    
        map3DView = findViewById(R.id.map3dView)
        map3DView.onCreate(savedInstanceState)
        map3DView.getMap3DViewAsync(this)
    }
    
  6. onMap3DViewReady メソッドをオーバーライドします。このコールバックは、地図を使用できる状態になるとトリガーされます。

    override fun onMap3DViewReady(googleMap3D: GoogleMap3D) {
        // Interact with the googleMap3D object here
        this.googleMap3D = googleMap3D
        // You can now make calls to the googleMap3D object, e.g.,
        // googleMap3D.cameraController.flyTo(camera { ... })
    }
    
  7. 次のオーバーライドを MainActivity に追加して、Activity から Map3DView にライフサイクル イベントを転送します。

    override fun onStart() {
        super.onStart()
        map3DView.onStart()
    }
    
    override fun onResume() {
        super.onResume()
        map3DView.onResume()
    }
    
    override fun onPause() {
        map3DView.onPause()
        super.onPause()
    }
    
    override fun onStop() {
        map3DView.onStop()
        super.onStop()
    }
    
    override fun onDestroy() {
        map3DView.onDestroy()
        super.onDestroy()
    }
    
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        map3DView.onSaveInstanceState(outState)
    }
    
    override fun onLowMemory() {
        super.onLowMemory()
        map3DView.onLowMemory()
    }
    

パート 3: Gradle の同期と実行

アプリのレイアウトとアクティビティを更新したので、アプリをビルドして実行し、3D 地図ビューを確認できます。

  1. プロジェクトを Gradle と同期するには、[File] > [Sync Project with Gradle Files] を選択します。

  2. エミュレータまたは実機でアプリをビルドして実行するには、[Run] > [Run] を選択します。

すべてが正しく構成されていれば、アプリに 3D 地図が表示され、activity_main.xml で指定した座標付近が中心に表示されます。

次のステップ

アプリに基本的な 3D 地図を追加したので、カメラパス アニメーション3D マーカーポリゴンなど、Maps 3D SDK for Android の高度な機能を試してみましょう。