Добавьте 3D-карту в свое приложение,Добавьте 3D-карту в свое приложение

Выберите платформу: Android iOS JavaScript

3D-карта, показывающая Нью-Йорк.

На этой странице рассматривается пример того, как добавить базовую 3D-карту в приложение Android с помощью Maps 3D SDK для Android. Инструкции на этой странице предполагают, что вы уже выполнили шаги на странице настройки и имеете следующее:

  • Проект Google Cloud с включенным Maps 3D SDK для Android
  • Ключ API, настроенный для использования с Maps 3D SDK для Android
  • Проект Android Studio, настроенный для использования с Maps 3D SDK для Android

Более подробную информацию об этих предварительных условиях см. в разделе Настройка .

Часть 1: Обновление файла макета ( activity_main.xml ) для добавления компонента Map3DView

Компонент Map3DView — это представление, которое отображает 3D-карту в приложении. Следующие шаги добавляют компонент и настраивают начальное состояние карты, включая положение камеры и связанные атрибуты:

  1. Откройте файл макета вашей основной активности, который обычно находится по адресу app/src/main/res/layout/activity_main.xml .

  2. В корневом ConstraintLayout (или корневом элементе макета) добавьте пространство имен XML map3d :

    xmlns:map3d="http://schemas.android.com/apk/res-auto"
    
  3. Удалите <TextView> по умолчанию, который отображает «Hello World!».

  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

Следующие шаги инициализируют компонент Map3DView , добавленный в файл activity_main.xml в части 1, и управляют событиями жизненного цикла компонента:

  1. Откройте файл MainActivity.kt , который обычно находится по адресу app/src/main/java/com/example/yourpackagename/MainActivity.kt .

  2. Добавьте необходимые импорты для Maps 3D SDK для 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. Объявите переменные для Map3DView и GoogleMap3D :

    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. Пересылайте события жизненного цикла из Activity в Map3DView , добавив следующие переопределения в MainActivity :

    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 и запуск

Теперь, когда вы обновили макет и активность своего приложения, вы можете создать и запустить приложение, чтобы увидеть трехмерное изображение карты.

  1. Чтобы синхронизировать проект с Gradle, выберите Файл > Синхронизировать проект с файлами Gradle.

  2. Чтобы создать и запустить приложение на эмуляторе или физическом устройстве, выберите «Запустить» > «Запустить» .

Если все настроено правильно, вы должны увидеть в своем приложении трехмерную карту, центр которой находится около координат, указанных в activity_main.xml .

Следующие шаги

Теперь, когда вы добавили в свое приложение базовую 3D-карту, вы можете изучить более продвинутые функции Maps 3D SDK для Android, такие как анимация траектории камеры , 3D-маркеры или полигоны .