Obtenir la position géospatiale de la caméra de l'appareil

Une fois que vous avez configuré les paramètres de votre application pour utiliser l'API Geospatial, vous pouvez appeler ArEarth_getCameraGeospatialPose pour obtenir un ArGeospatialPose qui décrit le positionnement géospatial de l'appareil pour l'appareil photo dans la dernière image. Cette pose, gérée dans un objet ArEarth, contient les informations suivantes :

  • Lieu, exprimé en latitude et en longitude
  • Altitude
  • Orientation approximative de la direction vers laquelle l'utilisateur est orienté dans le système de coordonnées EUS, avec X+ pointant vers l'est, Y+ pointant vers le haut et Z+ pointant vers le sud

Vérifier l'état de suivi

Les valeurs géospatiales ne sont valides que lorsque ArEarth.ArTrackingState est ArTrackingState.AR_TRACKING_STATE_TRACKING et que ArEarth.ArEarthState est AR_EARTH_STATE_ENABLED. Veillez à encapsuler tous les appels d'API Geospatial dans un bloc de contrôle ArEarth.ArTrackingState.

if (ar_earth != NULL) {
  ArTrackingState earth_tracking_state = AR_TRACKING_STATE_STOPPED;
  ArTrackable_getTrackingState(ar_session, (ArTrackable*)ar_earth,
                               &earth_tracking_state);
  if (earth_tracking_state == AR_TRACKING_STATE_TRACKING) {
    ArGeospatialPose* camera_geospatial_pose = NULL;
    ArGeospatialPose_create(ar_session, &camera_geospatial_pose);
    ArEarth_getCameraGeospatialPose(ar_session, ar_earth,
                                    camera_geospatial_pose);
    // camera_geospatial_pose contains geodetic location, rotation, and
    // confidences values.
    ArGeospatialPose_destroy(camera_geospatial_pose);
  }
}

Si ArEarth.ArTrackingState ne devient pas ArTrackingState.AR_TRACKING_STATE_TRACKING, ArEarth.ArTrackingState peut être AR_TRACKING_STATE_PAUSED ou AR_TRACKING_STATE_STOPPED. Si aucune de ces conditions n'est vraie, vérifiez ArEarth.ArEarthState, qui affiche d'autres états d'erreur susceptibles d'empêcher le suivi de l'objet ArEarth.

Ajuster la pose pour plus de précision

Lorsque l'appareil est à l'horizontale dans l'orientation par défaut, les angles d'inclinaison (X+) et de roulis (Z+) ont tendance à être précis en raison d'un alignement naturel avec le suivi AR. Cependant, les angles du lacet (Y+) peuvent varier en fonction de la disponibilité des données VPS et des conditions temporelles du site. Votre application devra peut-être effectuer des ajustements pour plus de précision.

ArGeospatialPose_getOrientationYawAccuracy() fournit une estimation de la précision pour les angles de lacet (Y+) pour un certain ArGeospatialPose. La précision de la rotation de l'orientation est un nombre qui décrit le rayon, en degrés, du niveau de confiance au 68e centile autour des angles de rotation renvoyés par ArGeospatialPose_getEastUpSouthQuaternion(). En d'autres termes, il y a 68 % de chances que l'angle de lacet réel de ArGeospatialPose soit précis.

Plus la valeur est élevée, moins la précision est bonne. Par exemple, si l'angle de lacet estimé est de 60 degrés et que la précision du lacet est de 10 degrés, la probabilité que l'angle réel du lacet soit comprise entre 50 et 70 degrés est de 68 %.

Étape suivante