1. Обзор
ARCore — это платформа Google для создания возможностей дополненной реальности на смартфонах. Новый геопространственный API ARCore предоставляет новый аспект дополненной реальности, позволяя вам размещать путевые точки дополненной реальности для конкретного местоположения вокруг реальных ориентиров.
Что ты построишь
В этой лаборатории вы познакомитесь с ARCore Geospatial API. Вы узнаете, какую информацию Geospatial API может предложить для вашего общего опыта AR и как эти данные можно использовать для обеспечения простого поиска пути в AR.
Что вы узнаете
- Как настроить проект ARCore, использующий Geospatial API.
- Как запросить географические данные из Geospatial API и отобразить их с помощью Google Maps.
- Как разместить якорь, привязанный к реальному местоположению.
Что вам понадобится
- Поддерживаемое Android-устройство ARCore , подключенное с помощью USB-кабеля к вашей машине разработки и настроенное с возможностью отладки по USB .
- Android Studio установлена и настроена для создания приложений Android.
- Службы Google Play для AR 1.31 или более поздней версии, установленные на устройстве разработки Android.
2. Настройте среду разработки
Настройка Android Studio
Чтобы начать работу с Geospatial API, мы предоставили стартовый проект, который включает в себя основы проекта ARCore, интегрированного с Google Maps SDK. Это дает вам быстрый старт с Geospatial API.
- Запустите Android Studio и импортируйте проект из VCS.
- Если у вас уже открыт проект, используйте Файл > Создать > Проект из контроля версий....
- Если вы видите окно «Добро пожаловать в Android Studio» , используйте Get from VCS .
- Выберите Git и используйте URL-адрес
https://github.com/google-ar/codelab-geospatial.git
для импорта проекта.
Настройте проект Google Cloud
Геопространственный API использует изображения StreetView в сочетании с данными магнитометра и датчиков камеры устройства для улучшения значений ориентации. Чтобы использовать эту услугу, вам необходимо настроить проект Google Cloud.
- Создайте проект в Google Cloud Console:
- Посетите раздел «Создание проекта в Google Cloud Platform» .
- Введите соответствующее имя проекта (например, «Проект ARCore Geospatial API») и выберите любое местоположение.
- Нажмите Создать .
- Посетите раздел «Создание проекта в Google Cloud Platform» .
- Включите необходимые API:
- На боковой панели выберите «API и сервисы» , затем «Библиотека» .
- Найдите API ARCore .
- Нажмите Включить .
- Вернитесь в библиотеку .
- Найдите Maps SDK для Android .
- Нажмите Включить .
- Создайте учетные данные ключа API:
- В разделе «API и службы» выберите «Учетные данные» .
- На верхней панели нажмите «Создать учетные данные» , затем выберите «Ключ API» .
- Запишите созданный ключ, поскольку он понадобится вам для следующего шага. Вернитесь на страницу «Учетные данные» , если вам нужно получить их.
Выполнив эти шаги, вы создали проект Google Cloud с авторизацией ключа API и готовы использовать Geospatial API.
Интегрируйте ключ API с проектом Android Studio.
Чтобы связать ключ API из Google Cloud с вашим проектом, откройте проект, созданный вами в Android Studio, и измените ключи API:
- Откройте приложение > источник > AndroidManifest.xml .
- Найдите следующие записи
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" />
- Замените
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, используемых в этой лаборатории, см. в следующих дополнительных ресурсах: