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

Что вы узнаете
- Как настроить проект ARCore, использующий геопространственный API.
- Как запросить географические данные из геопространственного API и отобразить их с помощью Google Maps.
- Как установить якорь, прикрепленный к реальному месту.
Что вам понадобится
- Поддерживаемое устройство ARCore Android , подключенное к вашей машине разработчика с помощью USB-кабеля и настроенное на отладку по USB .
- Установлена и настроена программа Android Studio для сборки приложений Android.
- На устройстве разработчика Android должны быть установлены сервисы Google Play для AR версии 1.31 или более поздней.
2. Настройте среду разработки.
Настройка Android Studio
Для начала работы с геопространственным API мы предоставили стартовый проект, включающий основы проекта ARCore, интегрированного с SDK Google Maps. Это позволит вам быстро начать работу с геопространственным API.
- Запустите Android Studio и импортируйте проект из системы контроля версий.
- Если у вас уже открыт проект, воспользуйтесь меню Файл > Создать > Проект из системы контроля версий... .
- Если вы видите окно «Добро пожаловать в Android Studio» , используйте команду «Получить из системы контроля версий» .

- Выберите Git и используйте URL-адрес
https://github.com/google-ar/codelab-geospatial.gitдля импорта проекта.
Создайте проект в Google Cloud.
Геопространственный API использует изображения StreetView в сочетании с информацией от магнитометра и камеры устройства для уточнения значений ориентации. Для использования этого сервиса необходимо настроить проект в Google Cloud.
- Создайте проект в консоли Google Cloud:
- Перейдите на страницу «Создать проект в Google Cloud Platform» .

- Введите подходящее название проекта (например, "Проект ARCore Geospatial API") и выберите любое местоположение.
- Нажмите «Создать» .
- Перейдите на страницу «Создать проект в Google Cloud Platform» .
- Включите необходимые API:
- В боковой панели выберите «API и сервисы» , затем «Библиотека» .
- Найдите API ARCore .
- Нажмите «Включить» .
- Вернуться в библиотеку .
- Найдите Maps SDK для Android .
- Нажмите «Включить» .
- Создайте учетные данные API-ключа:
- В разделе «API и сервисы» выберите «Учетные данные» .
- В верхней панели нажмите «Создать учетные данные» , затем выберите «Ключ API» .
- Запишите созданный ключ, он понадобится вам на следующем шаге. Вернитесь на страницу «Учетные данные» , если вам потребуется его восстановить.
Выполнив эти шаги, вы создали проект Google Cloud с авторизацией по ключу API и готовы использовать геопространственный API.
Интегрируйте ключ API в проект Android Studio.
Чтобы связать ключ API из Google Cloud с вашим проектом, откройте созданный вами проект в Android Studio и измените ключи API:
- Откройте файл app > src > 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 разрешает этому приложению использовать геопространственный API, а значение, хранящееся в com.google.android.geo.API_KEY разрешает этому приложению использовать SDK Google Maps.
Проверьте свой проект
Убедитесь, что ваш проект полностью готов к запуску. В Android Studio запустите приложение. Вы должны увидеть изображение с камеры, а также работающую карту в нижней части экрана.

3. Определите местоположение пользователя.
На этом этапе вы добавляете код в пример проекта, чтобы начать работу с геопространственным API.
Настройте сессию ARCore для использования геопространственного API.
Для получения геопространственных данных необходимо включить геопространственный API. Измените GeospatialMode в конфигурации сессии на ENABLED , изменив функцию configureSession в HelloGeoActivity.kt :
fun configureSession(session: Session) {
session.configure(
session.config.apply {
// Enable Geospatial Mode.
geospatialMode = Config.GeospatialMode.ENABLED
}
)
}
Пока ENABLED геопространственный режим, приложение может получать геопространственную информацию.
Запросите данные из геопространственного API.
В HelloGeoRenderer.kt найдите следующую строку:
// TODO: Obtain Geospatial information and display it on the map.
Ниже проверьте, доступен ли объект Earth для использования. Это происходит, когда у него установлено 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
)
Эта функция постоянно обновляет положение на карте, используя значения, полученные из геопространственного API.
Попробуйте!
В Android Studio нажмите «Играть» . Поднимите устройство и подвигайте его, чтобы ARCore установил отслеживание. Через некоторое время на карте должен появиться зеленый маркер. Этот маркер вращается, когда вы осматриваете окрестности. Он также должен указывать в правильном направлении: когда вы физически смотрите на север, стрелка также указывает на север.

4. Установите якорь, используя земные координаты.
Геопространственный API позволяет размещать якоря в любой паре координат и с любым поворотом в реальном мире. Это позволяет пользователям видеть привязанный контент при посещении определенных мест.
На этом шаге вы добавляете возможность размещения якоря путем касания карты.
Настройте действие при нажатии на карту.
В проекте есть функция onMapClick , которая вызывается с указанием широты и долготы при щелчке по фрагменту карты. Функцию onMapClick можно найти в HelloGeoRenderer.kt .
Убедитесь, что объект «Земля» можно использовать.
Перед созданием привязок к Земле убедитесь, что у объекта Earth TrackingState равно TRACKING , что означает, что положение Земли известно. Также убедитесь, что у объекта EarthState значение ENABLED , что означает отсутствие проблем с геопространственным API. Добавьте следующие строки внутрь onMapClick :
val earth = session?.earth ?: return
if (earth.trackingState != TrackingState.TRACKING) {
return
}
Определите местоположение нового якоря.
После подтверждения того, что объект «Земля» отслеживается, отсоедините предыдущий 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 нажмите «Play» . Поднимите устройство и перемещайте его, чтобы ARCore установил отслеживание. Через некоторое время на карте должен появиться зеленый маркер, указывающий ваше текущее местоположение.
При касании карты используется геопространственный API для размещения якоря, который фиксируется в реальном месте. Попробуйте разместить якорь как можно ближе к вашему текущему местоположению, чтобы вы могли видеть его в режиме дополненной реальности. Он должен оставаться стабильным во время перемещения по окружающей среде.

5. Заключение
В этом практическом занятии вы научились использовать API геопространственных данных для создания простого приложения дополненной реальности, связанного с реальным миром.

Что мы рассмотрели
- Как настроить проект Google Cloud с включенным геопространственным API.
- Как получить геопространственную информацию в проекте ARCore и отобразить её на карте.
- Как установить точку привязки в реальном мире, используя географическое позиционирование.
Дополнительные ресурсы
Для получения более подробной информации о географических концепциях и SDK, используемых в этом практическом занятии, см. следующие дополнительные ресурсы: