
API-интерфейсы Streetscape Geometry предоставляют геометрию местности, зданий или других структур в сцене. Геометрию можно использовать для окклюзии, рендеринга или размещения AR-контента с помощью API-интерфейсов проверки попадания. Данные Streetscape Geometry получены с помощью изображений Google Street View.
Попробуйте образец
Пример приложения geospatial_java демонстрирует, как получить и визуализировать геометрию Streetscape.
Настройте геопространственный API
Чтобы использовать Streetscape Geometry, вам необходимо настроить Geospatial API в своем проекте. Следуйте инструкциям по включению Geospatial API , чтобы настроить Geospatial API.
Включить геометрию уличного пейзажа
Geospatial API получает данные Streetscape Geometry, когда для GeospatialMode установлено значение GeospatialMode.ENABLED , а StreetscapeGeometryMode установлено значение StreetscapeGeometryMode.ENABLED .
Ява
Config config = session.getConfig(); // Streetscape Geometry requires the Geospatial API to be enabled. config.setGeospatialMode(Config.GeospatialMode.ENABLED); // Enable Streetscape Geometry. config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED); session.configure(config);
Котлин
session.configure( session.config.apply { // Streetscape Geometry requires the Geospatial API to be enabled. geospatialMode = Config.GeospatialMode.ENABLED // Enable Streetscape Geometry. streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED } )
Получите геометрию Streetscape в сеансе ARCore
ИспользуйтеSession.getAllTrackables() и StreetscapeGeometry.class для фильтрации результатов.Ява
session.getAllTrackables(StreetscapeGeometry.class);
Котлин
session.getAllTrackables(StreetscapeGeometry::class.java)
Понимание StreetscapeGeometry
StreetscapeGeometry содержит информацию о здании:
-
StreetscapeGeometry.getType()
Идентифицирует StreetscapeGeometry как местность или здание. -
StreetscapeGeometry.getMesh()
Получите полигональнуюMesh, соответствующую этой местности или зданию. -
StreetscapeGeometry.getMeshPose()
Описывает происхождение геометрии. Все точкиMeshдолжны быть преобразованы с помощьюStreetscapeGeometry.getMeshPose(). -
StreetscapeGeometry.getQuality()
Обеспечивает качество данных сетки. Уровни детализации описаны в стандарте CityGML 2.0 .
Здание ЛОД 1
StreetscapeGeometry.Quality.BUILDING_LOD_1 состоит из контуров зданий, вытянутых вверх до плоской вершины. Высота здания может быть неточной.

Здание ЛОД 2
StreetscapeGeometry.Quality.BUILDING_LOD_2 будет иметь геометрию более высокой точности. Сетчатые стены и крыши будут более точно соответствовать форме здания. Меньшие элементы, такие как дымоходы или вентиляционные отверстия на крыше, все еще могут выступать за пределы сетки.

Понимание Mesh
Mesh — это полигональная сетка, представляющая поверхностную реконструкцию геометрии уличного пейзажа. Каждая Mesh включает в себя буфер вершин и буфер индексов:
-
Mesh.getVertexListSize()
Получает количество вершин в этой сетке. -
Mesh.getVertexList()
Получите объединенные позиции вершин сетки в координатах относительноStreetscapeGeometry.getMeshPose(). -
Mesh.getIndexListSize()
Получает количество индексов в этой сетке. -
Mesh.getIndexList()
Получите индексы вершин, составляющих грань.
Прикрепите контент AR к StreetscapeGeometry
Есть два способа прикрепить AR-контент к Streetscape Geometry:- Включите геопространственную глубину и используйте проверку глубины . Это рекомендуемый и более простой метод.
- Используйте
Trackable.createAnchor()для создания привязки в заданной позе, прикрепленной кStreetscapeGeometry. Этот якорь унаследует свое состояние отслеживания от родительскогоStreetscapeGeometry.
Выполните проверку попадания в StreetscapeGeometry
Frame.hitTest() можно использовать для проверки соответствия геометрии Streetscape. Если пересечения найдены, HitResult содержит информацию о позе места удара, а также ссылку на StreetscapeGeometry , в который был нанесен удар. Эту геометрию Streetscape можно передать в Trackable.createAnchor() чтобы создать прикрепленную к ней якорь.
Ява
for (HitResult hit : frame.hitTest(singleTapEvent)) { if (hit.getTrackable() instanceof StreetscapeGeometry) { Pose hitPose = hit.getHitPose(); hit.getTrackable().createAnchor(hitPose); } }
Котлин
for (hit in frame.hitTest(singleTapEvent)) { if (hit.trackable is StreetscapeGeometry) { val hitPose = hit.hitPose hit.trackable.createAnchor(hitPose) } }
Включить геопространственную глубину
Geospatial Depth сочетает в себе геометрию уличного пейзажа с данными местных датчиков для улучшения данных о глубине. Когда геопространственная глубина включена, выходные данные глубины и необработанные изображения глубины изменяются, чтобы включать в себя растровую геометрию уличного пейзажа в дополнение к локально наблюдаемой глубине. Это может повысить точность поз с использованием глубины.