1. Прежде чем начать
ARCore — это фреймворк Google для создания приложений дополненной реальности (AR) на смартфонах. API Geospatial Streetscape Geometry и Rooftop anchor помогают вашим приложениям дополненной реальности анализировать здания вокруг пользователей.
В этой лабораторной работе вы создадите приложение дополненной реальности, которое визуализирует геометрию городского пейзажа вашего района и позволяет украсить его стены. Затем вы с помощью анкеров для крыш добавите декор на крыши окружающих домов.

Предпосылки
- Базовые знания дополненной реальности
- Базовые знания геопространственного API ARCore
Чему вы научитесь
- Как настроить проект Google Cloud, который может использовать API геопространственных данных ARCore.
- Как получить геометрию городского пейзажа из Geospatial API.
- Как визуализировать здания и ландшафты, полученные с помощью геометрии городского пейзажа.
- Как выполнить основные расчеты над полученными полигонами.
- Как выполнить проверку на попадание в геометрию.
- Как использовать анкеры для крепления содержимого к верхним частям зданий.
Что вам понадобится
- Поддерживаемое устройство ARCore Android , подключенное с помощью USB-кабеля к вашей машине для разработки и настроенное на отладку по USB .
- На устройстве разработки Android установлены сервисы Google Play для AR 1.37 или выше.
- Android Studio установлена и настроена для создания приложений Android.
2. Настройте свою среду
Чтобы использовать геопространственные API с Kotlin и Android Studio, вам понадобится проект Google Cloud и наш стартовый проект.
Настройте проект Google Cloud
ARCore Geospatial API подключается к Google Cloud для предоставления информации о локализации из системы визуального позиционирования Google (VPS) в областях, охватываемых Google Street View.
Чтобы использовать этот сервер в своем проекте, выполните следующие действия:
- Создайте проект в Google Cloud .

- В поле Имя проекта введите подходящее имя, например,
ARCore Geospatial API project, и выберите любое местоположение. - Нажмите «Создать» .
- В консоли Google Cloud на странице выбора проектов нажмите Создать проект .
- Щелкните следующую ссылку, чтобы просмотреть API ARCore для этого проекта, и щелкните Включить :
- Создайте API-ключ для вашего проекта:
- В разделе API и службы выберите Учетные данные .
- Нажмите Создать учетные данные и выберите Ключ API .
- Запишите ключ, он понадобится вам позже.
Вы создали проект Google Cloud с авторизацией по ключу API и готовы использовать Geospatial API в примере проекта.
Настройка Android Studio
Для начала работы с Geospatial API мы предоставили стартовый проект, который включает в себя основы проекта ARCore, интегрированного с Geospatial API.
Чтобы настроить Android Studio, выполните следующие действия:
- Откройте Android Studio и выполните одно из следующих действий:
- Если у вас уже открыт проект, нажмите Файл > Новый > Проект из системы управления версиями .
- Если вы видите окно «Добро пожаловать в Android Studio» , нажмите « Получить из VCS» .

- Выберите Git и введите
https://github.com/google-ar/codelab-streetscape-geometry-rooftop-anchors.git, чтобы импортировать проект.
Интегрируйте ключ API с проектом Android Studio
Чтобы связать ключ API от Google Cloud с вашим проектом, выполните следующие действия:
- В Android Studio нажмите app > src и дважды щелкните
AndroidManifest.xml. - Найдите следующие записи
meta-data:<meta-data android:name="com.google.android.ar.API_KEY" android:value="API_KEY" /> - Замените
API_KEYключом API, созданным в проекте Google Cloud . Значение, сохранённое вcom.google.android.ar.API_KEY, разрешает этому приложению использовать геопространственный API.
Проверьте свой проект
- Чтобы проверить свой проект, запустите приложение на устройстве разработки. В верхней части экрана вы увидите вид с камеры и геопространственную отладочную информацию. Вы также увидите кнопки и элементы управления, которые, на первый взгляд, не имеют функциональности; вы запрограммируете эту функциональность в своем проекте в ходе этой лабораторной работы.

3. Визуализируйте данные о геометрии городского пейзажа
После того, как вы убедитесь, что Geospatial API работает на вашем устройстве, вы получите геометрию городского пейзажа из Geospatial API.
Включить геометрию городского пейзажа
- В файле
StreetscapeGeometryActivity.ktнайдите следующую строку:// TODO: Enable Streetscape Geometry. - После этой строки включите режим streetscape-geometry:
Если включены Geospatial API и режим геометрии уличного пейзажа, ваше приложение может получать информацию о геометрии уличного пейзажа вокруг пользователя.streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
Получить геометрию городского пейзажа
- В файле
StreetscapeGeometryActivity.ktнайдите следующую строку:// TODO: Obtain Streetscape Geometry. - После этой строки получим геометрию городского пейзажа, получив все
Trackableобъекты и отфильтровав поStreetscapeGeometry: Эти геометрические элементы используются в простой визуализации, представленной в примере проекта. Эта визуализация отображает каждое здание или полигон рельефа разным цветом.val streetscapeGeometry = session.getAllTrackables(StreetscapeGeometry::class.java) - На следующей строке добавьте следующий код:
streetscapeGeometryRenderer.render(render, streetscapeGeometry) - Запустите приложение и посетите здание в вашем районе.
- После завершения геопространственной локализации нажмите
Настройки и включение визуализации геометрии городского пейзажа. - Посмотрите на здание в дополненной реальности. Каждое сегментированное здание имеет свой цвет, а также отображаются перечисления
QualityиType» центральной геометрии.

4. Проведите проверку на попадание с использованием данных о геометрии уличного пейзажа.
Теперь, когда вы видите геометрию городского пейзажа, вы можете использовать тест на попадание, чтобы украсить здание. Тест на попадание находит пересечение виртуальной геометрии с лучом. Тест на попадание используется для определения геометрии, на которую нажимает пользователь.
Выполнить тест на попадание
В этом разделе вы размещаете звезду на фасаде здания, когда пользователь нажимает на его геометрию. Вы делаете это с помощью проверки попадания с точки зрения пользователя в игровом мире и регистрируете объекты дополненной реальности, которые встречаются на пути. Затем вы используете эту информацию для проверки того, нажал ли пользователь на полигон здания.
- В файле
StreetscapeCodelabRenderer.ktнайдите следующую строку:// TODO: determine the Streetscape Geometry at the center of the viewport - После этой строки добавьте следующий код:
Этот код использует координаты центра для поиска геометрического объекта городского пейзажа, представляющего собой здание. Результат используется для добавления декора.val centerHits = frame.hitTest(centerCoords[0], centerCoords[1]) val hit = centerHits.firstOrNull { val trackable = it.trackable trackable is StreetscapeGeometry && trackable.type == StreetscapeGeometry.Type.BUILDING } ?: return
Добавьте звездное украшение на кран
- В файле
StreetscapeCodelabRenderer.ktнайдите следующую строку:// TODO: Create an anchor for a star, and add it to the starAnchors object. - После этой строки добавьте следующий код:
Классval transformedPose = ObjectPlacementHelper.createStarPose(hit.hitPose) val anchor = hit.trackable.createAnchor(transformedPose) starAnchors.add(anchor)ObjectPlacementHelperопределяет подходящее место для размещения звезды, ориентируясь на позу попадания. ОбъектstarAnchorsиспользуется для визуализации звёзд в режиме дополненной реальности.
Попробуй это
- Запустите приложение и посетите здание в вашем районе.
- После завершения геопространственной локализации наведите камеру на здание и коснитесь экрана. В центре экрана на здании появится звезда.

5. Используйте данные о якорях на крыше
Наконец, используйте анкеры для крыши, чтобы добавить украшения на крышу здания. Анкеры для крыши позволяют прикрепить анкеры дополненной реальности к крышам зданий с заданной широтой и долготой. Эти анкеры используются для крепления воздушных шаров к зданиям вокруг пользователя.
Добавить поведение в режим воздушного шара
В проекте предусмотрено два режима размещения ресурсов: режим подсолнуха, который вы уже использовали, и режим воздушного шара.
Чтобы запрограммировать поведение режима воздушного шара, выполните следующие действия:
- В файле
StreetscapeCodelabRenderer.ktнайдите следующую строку:// TODO: Create an anchor for a balloon and add it to the balloonAnchors object. - Используйте позу удара, чтобы создать отличное место для вашего воздушного шара:
val transformedPose = ObjectPlacementHelper.createBalloonPose(frame.camera.pose, hit.hitPose) - Преобразуем
transformedPoseпеременную Pose в геопространственную позу:val earth = session?.earth ?: return val geospatialPose = earth.getGeospatialPose(transformedPose) - Создайте якорь на крыше с преобразованными широтой и долготой:
earth.resolveAnchorOnRooftopAsync( geospatialPose.latitude, geospatialPose.longitude, 0.0, transformedPose.qx(), transformedPose.qy(), transformedPose.qz(), transformedPose.qw() ) { anchor, state -> if (!state.isError) { balloonAnchors.add(anchor) } }
Попробуйте это
- Запустите приложение и посетите здание в вашем районе.
- После завершения геопространственной локализации перейдите в режим всплывающего окна и коснитесь здания. Над зданием появится всплывающее окно.

6. Заключение
Поздравляем! Вы создали приложение дополненной реальности, которое визуализирует геометрию городского пейзажа вашего района и позволяет украсить его стены звёздами. Вы также использовали анкеры для крыш, чтобы прикрепить воздушный шар к крышам окружающих вас домов.
