Les ancres géospatiales sont un type d'ancrage qui vous permet de placer du contenu 3D dans le monde réel.
Types d'ancres géospatiales
Il existe trois types d'ancrages géospatiaux, qui gèrent chacun l'altitude différemment :
Ancres WGS84:
Les ancres WGS84 vous permettent de placer du contenu 3D à n'importe quelle latitude, la longitude et l'altitude.Ancres de relief:
Les ancrages de relief vous permettent de placer du contenu en utilisant uniquement la latitude et la avec une hauteur par rapport au relief à cette position. L'altitude est déterminée par rapport au sol ou au sol, par VPS.Ancres de toit:
Les ancrages de toit vous permettent de placer du contenu en utilisant uniquement la latitude et la avec une hauteur par rapport au toit d'un bâtiment à cette position. L'altitude est déterminée par rapport à la partie supérieure d'un bâtiment, connue sous le nom par Streetscape Geometry. L'altitude du relief est utilisée par défaut lorsqu'il n'est pas placé sur un bâtiment.
WGS84 | Relief | Toit | |
---|---|---|---|
Position horizontale | Latitude, Longitude | Latitude, Longitude | Latitude, Longitude |
Position verticale | Altitude par rapport à WGS84 | Par rapport au niveau du terrain déterminé par Google Maps | Par rapport au niveau du toit déterminé par Google Maps |
Doit être résolu par le serveur ? | Non | Oui | Oui |
Prérequis
Assurez-vous d'activer l'API Geospatial avant de continuer.
Placer des ancres géospatiales
Chaque type d'ancre dispose d'API dédiées pour la création. Pour en savoir plus, consultez la page Types d'ancres géospatiales.
Créer une ancre à partir d'un test de positionnement
Vous pouvez également créer un ancrage géospatial à partir d'un résultat de test de contact.
Utilisez la transformation à partir du test de collision et convertissez-la en GARGeospatialTransform
. Utilisez-le pour placer l'un des trois types d'ancrage décrits.
Obtenir une transformation géospatiale à partir d'une transformation AR
GARSession.geospatialTransformFromTransform:error:
offre un moyen supplémentaire de déterminer la latitude et la longitude en convertissant une transformation AR en transformation géospatiale.
Obtenir une transformation AR à partir d'une transformation géospatiale
GARSession.transformFromGeospatialCoordinate:altitude:eastUpSouthQTarget:error:
convertit une position horizontale, une altitude et une rotation de quaternion spécifiées par la Terre par rapport à un repère de coordonnées est-haut-sud en une transformation AR par rapport aux coordonnées mondiales GL.
Choisir la méthode adaptée à votre cas d'utilisation
Chaque méthode de création d'une ancre comporte des compromis à prendre en compte:
- Lorsque vous utilisez la géométrie du paysage urbain, utilisez un test de positionnement pour associer du contenu à un bâtiment.
- Privilégiez les repères "Terrain" ou "Toit" aux repères WGS84, car ils utilisent des valeurs d'altitude déterminées par Google Maps.
Déterminer la latitude et la longitude d'un lieu
Vous pouvez calculer la latitude et la longitude d'un lieu de trois manières :
- Utilisez Geospatial Creator pour afficher et enrichir le monde avec du contenu 3D sans avoir à vous rendre physiquement sur un site. Vous pouvez ainsi placer visuellement du contenu immersif 3D à l'aide de Google Maps dans l'éditeur Unity. La latitude, la longitude, la rotation et l'altitude du contenu seront automatiquement calculées.
- Utiliser Google Maps
- Utilisez Google Earth. Notez que si vous utilisez Google Earth plutôt que Google Maps pour obtenir ces coordonnées, vous obtiendrez une marge d'erreur pouvant atteindre plusieurs mètres.
- Se rendre sur le site
Utiliser Google Maps
Pour obtenir la latitude et la longitude d'un établissement à l'aide de Google Maps, procédez comme suit:
Accédez à Google Maps sur votre ordinateur.
Accédez à Calques > Plus.
Sélectionnez Satellite dans le champ Type de carte et décochez la case Vue Globe en bas à gauche de l'écran.
Cela force une perspective 2D et élimine les erreurs potentielles pouvant découler d'une vue 3D angulaire.
Sur la carte, cliquez avec le bouton droit de la souris sur le lieu et sélectionnez la longitude et la latitude pour le copier dans le presse-papiers.
Utiliser Google Earth
Vous pouvez calculer la latitude et la longitude d'un lieu dans Google Earth en cliquant sur un lieu dans l'interface utilisateur et en lisant les données des détails du repère.
Pour obtenir la latitude et la longitude d'un lieu à l'aide de Google Earth :
Accédez à Google Earth sur votre ordinateur.
Accédez au menu hamburger , puis sélectionnez Style de carte.
Désactivez le bouton Bâtiments 3D.
Une fois l'option Bâtiments 3D désactivée, cliquez sur l'icône en forme de punaise pour ajouter un repère au lieu sélectionné.
Spécifiez un projet qui contiendra votre repère, puis cliquez sur Enregistrer.
Dans le champ Titre du repère, saisissez un nom pour le repère.
Cliquez sur la flèche de retour dans le volet du projet et sélectionnez le menu Autres actions.
Sélectionnez Exporter en tant que fichier KML dans le menu.
Le fichier KLM indique la latitude, la longitude et l'altitude d'un repère dans la balise <coordinates>
, séparés par des virgules, comme suit :
<coordinates>-122.0755182435043,37.41347299422944,7.420342565583832</coordinates>
N'utilisez pas la latitude et la longitude des balises <LookAt>
, qui spécifient la position de la caméra, et non la position.
Se rendre sur l'emplacement physique
Vous pouvez calculer l'altitude d'un lieu en vous y rendant physiquement et en effectuant une observation locale.
Obtenir le quaternion de rotation
GARGeospatialTransform.eastUpSouthQTarget
extrait l'orientation d'une transformation géospatiale et produit un quaternion représentant la matrice de rotation transformant un vecteur de la cible vers le système de coordonnées est-haut-sud (EUS). Points X+ vers l'est, points Y+ vers le haut et points Z+ vers le sud. Les valeurs sont écrites dans l'ordre {x, y, z, w}
.
Ancrages WGS84
Une ancre WGS84 est un type d'ancre qui vous permet de placer du contenu 3D à n'importe quelle latitude, longitude et altitude. Elle repose sur une transformation et une orientation pour être placée dans le monde réel. La position utilise la latitude, la longitude et l'altitude, spécifiées dans le système de coordonnées WGS84. L'orientation consiste en une rotation quaternion.
L'altitude est exprimée en mètres au-dessus de l'ellipsoïde de référence WGS84, de sorte que le niveau du sol ne soit pas à zéro. Votre application se charge de fournir ces coordonnées pour chaque ancre créée.
Placer une ancre WGS84 dans le monde réel
Déterminer l'altitude d'un lieu
Il existe plusieurs façons de déterminer l'altitude d'un emplacement pour placer des repères :
- Si l'emplacement de l'ancre se trouve physiquement à proximité de l'utilisateur, vous pouvez utiliser une altitude semblable à celle de l'appareil de l'utilisateur.
- Une fois que vous disposez de la latitude et de la longitude, utilisez l'API Elevation pour obtenir une altitude en fonction de la spécification EGM96. Vous devez convertir l'altitude EGM96 de l'API Google Maps en WGS84 pour la comparer à l'altitude
GARGeospatialTransform
. Consultez l'évaluation GeoidEval, qui dispose à la fois d'une ligne de commande et d'une interface HTML. L'API Maps indique la latitude et la longitude conformément à la spécification WGS84 par défaut. - Vous pouvez obtenir la latitude, la longitude et l'altitude d'un lieu sur Google Earth. Vous obtiendrez ainsi une marge d'erreur pouvant aller jusqu'à plusieurs mètres. Utilisez la latitude, la longitude et l'altitude des balises
<coordinates>
, et non des balises<LookAt>
, dans le fichier KML. - Si une ancre existante est proche et si vous n'êtes pas sur une pente prononcée, vous pourrez peut-être utiliser l'altitude du
GARGeospatialTransform
de la caméra sans utiliser une autre source, comme l'API Google Maps.
Créer l'ancre
Une fois que vous disposez du quaternion de latitude, de longitude, d'altitude et de rotation, utilisez createAnchorWithCoordinate:altitude:eastUpSouthQAnchor:error:
.
pour ancrer du contenu à des coordonnées géographiques que vous spécifiez.
NSError *error = nil;
GARAnchor *anchor = [self.garSession createAnchorWithCoordinate:coordinate
altitude:altitude
eastUpSouthQAnchor:eastUpSouthQAnchor
error:&error];
Ancres de relief
Une ancre de relief est un type d'ancrage qui vous permet de placer des objets en RA à l'aide de la latitude et de la longitude uniquement, en exploitant les informations du VPS pour déterminer l'altitude précise au-dessus du sol.
Au lieu de saisir l'altitude souhaitée, vous devez indiquer l'altitude au-dessus du terrain. Lorsque cette valeur est égale à zéro, l'ancre est au même niveau que le relief.
Définir le mode de recherche d'avion
La recherche d'avion est facultative et n'est pas obligatoire pour utiliser des ancres. Notez que seuls les plans horizontaux sont utilisés. Les plans horizontaux facilitent l'alignement dynamique des ancrages de relief au sol.
Utilisez ARWorldTrackingConfiguration.PlaneDetection
pour sélectionner la méthode de détection des avions par votre application.
Créer un ancrage de terrain à l'aide de la nouvelle API Async
Pour créer et placer une ancre de relief, appelez GARSession.createAnchorWithCoordinate:altitudeAboveTerrain:eastUpSouthQAnchor:completionHandler:error:
.
L'ancre ne sera pas prête immédiatement et doit être résolue. Une fois le problème résolu, il sera disponible dans GARCreateAnchorOnTerrainFuture
.
GARCreateAnchorOnTerrainFuture *future = [self.garSession createAnchorWithCoordinate:coordinate
altitudeAboveTerrain:altitude
eastUpSouthQAnchor:eastUpSouthQTarget
completionHandler:^(GARAnchor *anchor, GARTerrainAnchorState state) {
// handle completion
}
error:&error];
Consulter l'état de l'avenir
L'objet Future est associé à un GARFutureState
.
État | Description |
---|---|
GARFutureStatePending |
L'opération est toujours en attente. |
GARFutureStateDone |
L'opération est terminée et le résultat est disponible. |
GARFutureStateCancelled |
L'opération a été annulée. |
Vérifier l'état de l'ancrage de terrain du résultat futur
GARTerrainAnchorState
appartient à l'opération asynchrone et fait partie du résultat final de Future.
switch (future.resultTerrainAnchorState) {
case GARTerrainAnchorStateSuccess:
// Terrain anchor finished resolving.
break;
case GARTerrainAnchorStateErrorUnsupportedLocation:
// The requested anchor is in a location that isn't supported by the Geospatial API.
break;
case GARTerrainAnchorStateErrorNotAuthorized:
// An error occurred while authorizing your app with the ARCore API. See
// https://developers.google.com/ar/reference/ios/group/GARTerrainAnchorState#garterrainanchorstateerrornotauthorized
// for troubleshooting steps.
break;
case GARTerrainAnchorStateErrorInternal:
// The Terrain anchor could not be resolved due to an internal error.
break;
default:
break;
}
Points d'ancrage sur le toit
Les ancrages de toit sont un type d'ancrage et ressemblent beaucoup aux ancres de relief ci-dessus. La différence est que vous indiquerez l'altitude au-dessus du toit plutôt que l'altitude au-dessus du terrain.
Créer une ancre de toit à l'aide de la nouvelle API asynchrone
L'ancre n'est pas prête immédiatement et doit être résolue.
Pour créer et placer un ancrage sur le toit, appelez GARSession.createAnchorWithCoordinate:altitudeAboveRooftop:eastUpSouthQAnchor:completionHandler:error:
. Comme pour les ancres de relief, vous accéderez également aux GARFutureState
de demain. Vous pouvez ensuite consulter le résultat "Future" pour accéder à GARRooftopAnchorState
.
GARCreateAnchorOnRooftopFuture *future = [self.garSession createAnchorWithCoordinate:coordinate
altitudeAboveRooftop:altitude
eastUpSouthQAnchor:eastUpSouthQTarget
completionHandler:^(GARAnchor *anchor, GARRooftopAnchorState state) {
// handle completion
}
error:&error];
Vérifier l'état de l'avenir
"Future" est associé à un élément GARFutureState
(voir le tableau ci-dessus).
Vérifier l'état de l'ancre sur le toit du résultat Future
GARRooftopAnchorState
appartient à l'opération asynchrone et fait partie du résultat final de Future.
switch (future.resultRooftopAnchorState) {
case GARRooftopAnchorStateSuccess:
// Rooftop anchor finished resolving.
break;
case GARRooftopAnchorStateErrorUnsupportedLocation:
// The requested anchor is in a location that isn't supported by the Geospatial API.
break;
case GARRooftopAnchorStateErrorNotAuthorized:
// An error occurred while authorizing your app with the ARCore API. See
// https://developers.google.com/ar/reference/ios/group/GARRooftopAnchorState#garrooftopanchorstateerrornotauthorized
// for troubleshooting steps.
break;
case GARRooftopAnchorStateErrorInternal:
// The Rooftop anchor could not be resolved due to an internal error.
break;
default:
break;
}
Étape suivante
- Assurez-vous de bien comprendre le quota d'utilisation de l'API Geospatial.