Создайте приложение дополненной реальности (AR) с помощью нового API ARCore Geospatial API.

1. Обзор

ARCore — это платформа Google для создания возможностей дополненной реальности на смартфонах. Новый геопространственный API ARCore предоставляет новый аспект дополненной реальности, позволяя вам размещать путевые точки дополненной реальности для конкретного местоположения вокруг реальных ориентиров.

Что ты построишь

В этой лаборатории кода вы начнете работать с ARCore Geospatial API. Вы узнаете, какую информацию Geospatial API может предложить для вашего общего опыта AR и как эти данные можно использовать для обеспечения простого поиска пути в AR.

Что вы узнаете

  • Как настроить проект ARCore, использующий Geospatial API.
  • Как запросить географические данные из Geospatial API и отобразить их с помощью Google Maps.
  • Как разместить якорь, привязанный к реальному местоположению.

Что вам понадобится

2. Настройте среду разработки

Настройка Android Studio

Чтобы начать работу с Geospatial API, мы предоставили стартовый проект, который включает в себя основы проекта ARCore, интегрированного с Google Maps SDK. Это дает вам быстрый старт с Geospatial API.

  1. Запустите Android Studio и импортируйте проект из VCS.
    • Если у вас уже открыт проект, используйте Файл > Создать > Проект из контроля версий....
    • Если вы видите окно «Добро пожаловать в Android Studio» , используйте Get from VCS . Получить из местоположения VCS
  2. Выберите Git и используйте URL-адрес https://github.com/google-ar/codelab-geospatial.git для импорта проекта.

Настройте проект Google Cloud

Геопространственный API использует изображения StreetView в сочетании с данными магнитометра и датчиков камеры устройства для улучшения значений ориентации. Чтобы использовать эту услугу, вам необходимо настроить проект Google Cloud.

  1. Создайте проект в Google Cloud Console:
  2. Включите необходимые API:
    • На боковой панели выберите «API и сервисы» , затем «Библиотека» .
    • Найдите API ARCore .
    • Нажмите Включить .
    • Вернитесь в библиотеку .
    • Найдите Maps SDK для Android .
    • Нажмите Включить .
  3. Создайте учетные данные ключа API:
    • В разделе «API и службы» выберите «Учетные данные» .
    • На верхней панели нажмите «Создать учетные данные» , затем выберите «Ключ API» .
    • Запишите созданный ключ, поскольку он понадобится вам для следующего шага. Вернитесь на страницу «Учетные данные» , если вам нужно получить их.

Выполнив эти шаги, вы создали проект Google Cloud с авторизацией ключа API и готовы использовать Geospatial API.

Интегрируйте ключ API с проектом Android Studio.

Чтобы связать ключ API из Google Cloud с вашим проектом, откройте проект, созданный вами в Android Studio, и измените ключи API:

  1. Откройте приложение > источник > AndroidManifest.xml .
  2. Найдите следующие записи meta-data :
    <meta-data
        android:name="com.google.android.ar.API_KEY"
        android:value="PLACEHOLDER_API_KEY" />
    
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="PLACEHOLDER_API_KEY" />
    
  3. Замените PLACEHOLDER_API_KEY ключом API, который вы создали в своем проекте Google Cloud .

Значение, хранящееся в com.google.android.ar.API_KEY , разрешает этому приложению использовать Geospatial API, а значение, хранящееся в com.google.android.geo.API_KEY , разрешает этому приложению использовать SDK Google Maps.

Подтвердите свой проект

Убедитесь, что ваш проект готов к работе. В Android Studio запустите свое приложение. Вы должны увидеть вид с камеры вместе с рабочей картой в нижней части экрана.

Шаблонный проект

3. Определите положение пользователя

На этом этапе вы добавите код в пример проекта, чтобы начать работу с Geospatial API.

Настройте сеанс ARCore для использования Geospatial API.

Чтобы получать геопространственные данные, вам необходимо включить Geospatial API. Измените GeospatialMode в конфигурации вашего сеанса на ENABLED , изменив функцию configureSession в HelloGeoActivity.kt :

fun configureSession(session: Session) {
  session.configure(
    session.config.apply {
      // Enable Geospatial Mode.
      geospatialMode = Config.GeospatialMode.ENABLED
    }
  )
}

Пока геопространственный режим ENABLED , приложение может получать геопространственную информацию.

Запросить данные из Geospatial API

В HelloGeoRenderer.kt найдите следующую строку:

// TODO: Obtain Geospatial information and display it on the map.

Под ним убедитесь, что объект «Земля» доступен для использования. Вот тогда у него есть trackingState TrackingState.ENABLED .

val earth = session.earth
if (earth?.trackingState == TrackingState.TRACKING) {
  // TODO: the Earth object may be used here.
}

Под TODO запросите геопространственную информацию у ARCore. Добавьте эту строку:

val cameraGeospatialPose = earth.cameraGeospatialPose

Это дает вам GeospatialPose , который содержит следующую информацию:

  • Местоположение, выраженное в широте и долготе. Также предоставляется оценка точности местоположения.
  • Высота и оценка точности высоты.
  • Курс, приблизительное направление, в котором смотрит устройство, и оценка точности курса.

Отображение информации о местоположении на карте

Вы можете использовать GeospatialPose хранящийся в cameraGeospatialPose , для перемещения маркера на карте, который показывает, где находится пользователь. Продолжайте с того места, где остановились, и добавьте следующее:

activity.view.mapView?.updateMapPosition(
  latitude = cameraGeospatialPose.latitude,
  longitude = cameraGeospatialPose.longitude,
  heading = cameraGeospatialPose.heading
)

Это постоянно обновляет положение карты, используя значения, полученные из Geospatial API.

Попробуйте это

В Android Studio нажмите «Воспроизвести» . Держите устройство вверх и перемещайте его, чтобы помочь ARCore установить отслеживание. Через некоторое время вы увидите на карте зеленый маркер. Этот маркер вращается, когда вы смотрите на свое окружение. Она также должна указывать в правильном направлении: когда вы физически смотрите на север, стрелка также указывает на север.

Зеленая стрелка указывает на ваше местоположение и направление.

4. Разместите якорь, используя координаты Земли.

Геопространственный API может размещать якоря в любой паре координат и вращении в реальном мире. Это позволяет вашим пользователям видеть закрепленный контент при посещении определенных мест.

На этом этапе вы добавите возможность разместить якорь, нажав на карту.

Установите действие при нажатии на карту

В проекте имеется функция onMapClick , которая вызывается с указанием широты и долготы при щелчке по фрагменту карты. Найдите функцию onMapClick в HelloGeoRenderer.kt .

Убедитесь, что объект Земли можно использовать.

Прежде чем создавать якоря на Земле, убедитесь, что TrackingState объекта Earth — TRACKING , что означает, что положение Земли известно. Также убедитесь, что для EarthState установлено значение ENABLED , что означает, что с Geospatial API не возникло никаких проблем. Добавьте эти строки внутри onMapClick :

val earth = session?.earth ?: return
if (earth.trackingState != TrackingState.TRACKING) {
  return
}

Определите расположение нового якоря

Убедившись, что объект Earth отслеживается, отсоедините предыдущий earthAnchor , если он существует. Вы замените earthAnchor новым якорем на следующих шагах:

earthAnchor?.detach()

Затем используйте cameraGeospatialPose , чтобы определить высоту для новой привязки. Используйте пару координат, полученную при нажатии на карту, в качестве местоположения привязки.

// Place the earth anchor at the same altitude as that of the camera to make it easier to view.
val altitude = earth.cameraGeospatialPose.altitude - 1
// The rotation quaternion of the anchor in the East-Up-South (EUS) coordinate system.
val qx = 0f
val qy = 0f
val qz = 0f
val qw = 1f
earthAnchor =
  earth.createAnchor(latLng.latitude, latLng.longitude, altitude, qx, qy, qz, qw)

createAnchor создает Anchor , привязанную к геодезическим координатам с заданным поворотом. Этот якорь пытается оставаться стабильным и привязанным к указанным координатам и высоте.

Показать установленный маркер на карте

Наконец, переместите новый маркер, указывающий, где он был размещен:

activity.view.mapView?.earthMarker?.apply {
  position = latLng
  isVisible = true
}

Попробуйте это

В Android Studio нажмите «Воспроизвести» . Держите устройство вверх и перемещайте его, чтобы помочь ARCore установить отслеживание. Через некоторое время вы увидите на карте зеленый маркер, обозначающий ваше текущее положение.

При нажатии на карту используется Geospatial API для размещения привязки, которая привязана к реальному местоположению. Попробуйте разместить якорь рядом с вашим текущим местоположением, чтобы вы могли видеть его в представлении AR. Он должен оставаться стабильным при навигации по среде.

Поместите маркер, нажав на карту.

5. Вывод

В этой лаборатории вы узнали, как использовать Geospatial API для создания простого AR-приложения, привязанного к реальному миру.

Поместите маркер, нажав на карту.

Что мы рассмотрели

  • Как настроить проект Google Cloud с включенным Geospatial API.
  • Как получить геопространственную информацию в проекте ARCore и отобразить ее на карте.
  • Как разместить якорь, расположенный в реальном мире, с использованием географического позиционирования.

Дополнительные ресурсы

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