L'API Geospatial utilise une combinaison de données VPS et GPS pour générer des postures géospatiales d'une grande précision. L'API peut être utilisée partout où l'appareil peut déterminer sa position :
- Dans les zones où la précision du GPS est faible, comme les espaces intérieurs et les environnements urbains denses, l'API s'appuie sur la couverture du VPS pour générer des poses de haute précision.
- Dans les environnements extérieurs où il y a peu ou pas d'obstacles au-dessus de l'utilisateur, l'API Geospatial peut être en mesure d'utiliser les données de localisation GPS disponibles pour générer des poses géospatiales avec une grande précision.
Vous pouvez déterminer la disponibilité des VPS à une position horizontale donnée avant le début de la session de RA et l'utiliser pour créer des expériences plus spécifiques (par exemple, pour présenter un "Enter AR") bouton uniquement lorsque VPS est disponible.
Activer l'API ARCore
Votre application doit activer l'API ARCore pour vérifier la disponibilité du service VPS.
Une fois l'API ARCore activée, vous pouvez vérifier la disponibilité du VPS sans :
- Une
Session
en cours d'exécution (avant d'appelerSession.resume()
) - Définir un
GeospatialMode
Vérifier la disponibilité du VPS dans votre application
L'API Geospatial peut être utilisée partout où l'appareil peut déterminer sa position. Si votre expérience RA repose sur la couverture VPS, vous pouvez utiliser Session.checkVpsAvailabilityAsync()
pour obtenir un VpsAvailabilityFuture
, une tâche asynchrone qui vérifie la disponibilité du VPS à une position horizontale donnée.
Une fois que vous avez le VpsAvailabilityFuture
, vous pouvez obtenir son résultat par interrogation ou via un rappel.
Interroger le résultat
Utilisez Future.getState()
pour obtenir l'état de Future
. Il existe trois états différents:
PENDING
: l'opération n'est pas encore terminée. Aucun résultat n'est donc connu.CANCELLED
: l'opération a été annulée parFuture.cancel()
. Les rappels enregistrés ne seront jamais appelés.DONE
: l'opération est terminée. UtilisezVpsAvailabilityFuture.getResult()
pour obtenir le résultat.
Vous pouvez continuer à vérifier Future.getState()
jusqu'à ce que la tâche soit terminée.
Java
// Obtain a VpsAvailabilityFuture and store it somewhere. VpsAvailabilityFuture future = session.checkVpsAvailabilityAsync(latitude, longitude, null); // Poll VpsAvailabilityFuture later, for example, in a render loop. if (future.getState() == FutureState.DONE) { switch (future.getResult()) { case AVAILABLE: // VPS is available at this location. break; case UNAVAILABLE: // VPS is unavailable at this location. break; case ERROR_NETWORK_CONNECTION: // The external service could not be reached due to a network connection error. break; // Handle other error states, e.g. ERROR_RESOURCE_EXHAUSTED, ERROR_INTERNAL, ... } }
Kotlin
// Obtain a VpsAvailabilityFuture and store it somewhere. val future = session.checkVpsAvailabilityAsync(latitude, longitude, null) // Poll VpsAvailabilityFuture later, for example, in a render loop. if (future.state == FutureState.DONE) { when (future.result) { VpsAvailability.AVAILABLE -> { // VPS is available at this location. } VpsAvailability.UNAVAILABLE -> { // VPS is unavailable at this location. } VpsAvailability.ERROR_NETWORK_CONNECTION -> { // The external service could not be reached due to a network connection error. } else -> { TODO("Handle other error states, e.g. ERROR_RESOURCE_EXHAUSTED, ERROR_INTERNAL, ...") } } }
Obtenir le résultat via un rappel
Vous pouvez également obtenir le résultat d'un Future
via un rappel. Utilisez Session.checkVpsAvailabilityAsync()
et fournissez un callback
. Cet callback
sera appelé sur le thread principal peu de temps après que l'état de Future
est DONE
.
Java
session.checkVpsAvailabilityAsync( latitude, longitude, result -> { // Callback is called on the Main thread. switch (result) { // Handle the VpsAvailability result as shown above. // For example, show UI that enables your AR view. } });
Kotlin
session.checkVpsAvailabilityAsync(latitude, longitude) { result -> // Callback is called on the Main thread. // Handle the VpsAvailability result as shown above. // For example, show UI that enables your AR view. TODO("Handle VpsAvailability " + result) }
Annuler la Future
Utilisez Future.cancel()
pour tenter d'annuler l'Future
. En raison du parallélisme de threads, il est possible que votre tentative d'annulation ne soit pas couronnée de succès.
Future.cancel()
renvoie true
si la tentative a abouti, et false
dans le cas contraire.
Utiliser l'API Geospatial sans couverture VPS
L'API Geospatial peut également être utilisée dans les zones qui ne disposent pas de couverture VPS. Dans les environnements extérieurs avec peu ou pas d'obstacles au-dessus, le GPS peut suffire à générer une pose avec une grande précision.
Étape suivante
- Obtenez la position géospatiale de l'appareil photo de l'appareil pour déterminer la position exacte de l'appareil dans le monde réel.