עבודה עם מיקומי תלת-ממד גיאו-מרחביים

מכשירי XR רלוונטיים
ההנחיות האלה יעזרו לכם ליצור חוויות למכשירי XR מהסוגים הבאים.
משקפי XR עם חיבור חוטי
משקפיים עם
אודיו ותצוגה פנימית

GeospatialPose מתאר מיקום בחלל ביחס לכדור הארץ. הוא מורכב מהרכיבים הבאים:

  • קו רוחב וקו אורך, שמצוינים במעלות כפי שמוגדר במפרט WGS84.
  • גובה, שמצוין במטרים מעל האליפסואיד WGS84, או שווה ערך בקירוב למטרים מעל פני הים.
  • כיוון, שמעריך את הכיוון שאליו פונה התנוחה במערכת הקואורדינטות של EUS. במערכת הקואורדינטות EUS, ‏X+‎ מצביע מזרחה, Y+‎ מצביע למעלה ו-Z+‎ מצביע דרומה.

‫Geospatial API מספק גישה לתנוחה הגיאו-מרחבית של המכשיר ומאפשר המרות בין תנוחות גיאו-מרחביות לתנוחות מקומיות של המכשיר.

דרישות מוקדמות

כדי לקבל ולהמיר תנוחות מרחביות, צריך להגדיר את האפליקציה לשימוש ב-Geospatial API. אפשר לקבל תנוחות גיאו-מרחביות רק כשל-Geospatial API יש מצב RUNNING.

המרת תנוחה מקומית במכשיר לתנוחה מרחבית

אפשר להמיר Pose מקומי במכשיר ל-GeospatialPose, למשל כדי לקבוע את המיקום של מכשיר המשתמש ביחס לכדור הארץ. כך תוכלו:

  • יצירת תוכן AR קבוע, שבו אובייקט וירטואלי שהמשתמש הציב מעוגן בצורה מדויקת למיקום גלובלי כדי שיהיה אפשר לאחזר אותו מאוחר יותר.
  • הפעלת חוויות מבוססות-מיקום על ידי עדכון רציף של מיקום המשתמש במפה, כדי לאפשר ניווט בזמן אמת או גיימפליי עם הגדרת גבולות וירטואליים.
  • לקבוע את ההקשר המדויק של המשתמש בעולם האמיתי כדי להפעיל לוגיקה של אפליקציה שרלוונטית למיקום.

בדוגמת הקוד הבאה אפשר לראות איך להמיר Pose ל-GeospatialPose באמצעות Geospatial.createGeospatialPoseFromPose().

val devicePose = ArDevice.getInstance(session).state.value.devicePose

// Convert the device Pose into a GeospatialPose.
when (val result = geospatial.createGeospatialPoseFromPose(devicePose)) {
    is CreateGeospatialPoseFromPoseSuccess -> {
        val geoPose = result.pose
        val lat = geoPose.latitude
        val lon = geoPose.longitude
        val alt = geoPose.altitude
        // Orientation is in the EUS (East-Up-South) coordinate system.
        val orientation = geoPose.eastUpSouthQuaternion
    }
    is CreateGeospatialPoseFromPoseNotTracking -> {
        // Geospatial is not currently tracking.
    }

    else -> {
        // A newer exception was added, but your app is using an old version of the library
    }
}

המרת תנוחה מרחבית לתנוחה מקומית במכשיר

אפשר גם להמיר GeospatialPose לPose מקומי במכשיר. הטרנספורמציה הזו לוקחת מידע שמוגדר על ידי קואורדינטות בעולם האמיתי, כמו מיקום של נקודת ציון, נתיב ניווט או תוכן AR קבוע, וממירה אותו למרחב החזותי המדויק של המכשיר של המשתמש.

דוגמת הקוד הבאה ממחישה איך להשתמש ב-Geospatial.createPoseFromGeospatialPose() כדי להמיר תנוחה גיאוגרפית לתנוחה מקומית במכשיר.

// Convert a GeospatialPose (lat/long/alt) back to a device-space Pose.
when (val result = geospatial.createPoseFromGeospatialPose(geoPose)) {
    is CreatePoseFromGeospatialPoseSuccess -> {
        val devicePose: Pose = result.pose
        // devicePose is now ready to be used relative to the tracking origin.
    }
    is CreatePoseFromGeospatialPoseNotTracking -> {
        // Geospatial is not currently tracking.
    }
    is CreatePoseFromGeospatialPoseInternalError -> {
        // An internal error occurred.
    }
    else -> {
        // A newer exception was added, but your app is using an old version of the library
    }
}