Геопространственные якоря – это тип якорей, которые позволяют размещать 3D-контент с географическими координатами с помощью Geospatial API.
Для определения положения геопространственных якорей используются широта и долгота. Широта и долгота определяются спецификацией WGS84. Это те же координаты, которые показываются в обычной системе GPS.
Как определить широту и долготу места
Если вы хотите указать конкретное место, определите его широту и долготу с помощью Google Карт.
- Откройте Google Карты на компьютере.
Выберите Слои > Ещё.


Измените тип карты на Спутник и снимите флажок Просмотр глобуса в левом нижнем углу экрана.

Это позволяет получить двухмерное изображение и избежать возможных ошибок, связанных с трехмерным изображением под углом.
Нажмите правой кнопкой мыши на местоположение на карте и выберите широту и долготу, чтобы скопировать их в буфер обмена.
Преобразование позиции в области пользователя в геопространственную привязку
Если вы можете посетить объект инфраструктуры, то можете определить его широту, долготу и высоту, преобразовав локальное положение устройства в геопространственное.
Как разместить контент в геопространственном якоре
Для геопространственных привязок требуется значение высоты относительно эллипсоида WGS84, рельефа или крыши.
Для значений высоты относительно эллипсоида WGS84 используйте
Geospatial.createAnchor:val createAnchorResult = geospatial.createAnchor( latitude, longitude, altitude, Quaternion.Identity, )
Чтобы задать высоту относительно рельефа или крыши, используйте
Geospatial.createAnchorOnSurface, а такжеGeospatialSurface.TERRAINиGeospatialSurface.ROOFTOPсоответственно, чтобы указать, как должна интерпретироваться итоговая высота:val createAnchorResult = geospatial.createAnchorOnSurface( latitude, longitude, altitude, Quaternion.Identity, GeospatialSurface.TERRAIN, )
Если вы используете
GeospatialSurface.ROOFTOP, то по умолчанию высота будет соответствовать высоте местности, если объект не размещен на здании.
Затем проверьте результат вызова:
when (createAnchorResult) { is AnchorCreateSuccess -> { // Use anchorCreateResult.anchor to render content at the result. } else -> { // Anchor create failed. // See AnchorCreateResult for possible failure reasons. } }
Наконец, используйте якорь, чтобы разместить 3D-контент:
Compose XR
Subspace(FollowTarget.anchor(anchorCreateResult.anchor)) { SpatialPanel { GeospatialContent() } }
SceneCore
val anchorSpace = AnchorSpace.create(session, anchorCreateResult.anchor) val contentEntity = createGeospatialContentEntity(context, session) anchorSpace.addChild(contentEntity)