کار با حالت‌های «زمین‌مکانی»

دستگاه‌های XR واجدشرایط
این راهنمایی به شما کمک می‌کند برای این نوع دستگاه‌های واقعیت گسترده تجربه بسازید.
عینک واقعیت گسترده سیمی
عینک
نمایشگردار و صوتی

GeospatialPose موقعیتی را در فضا نسبت به زمین توصیف می‌کند. این شناسه از مؤلفه‌های زیر تشکیل شده است:

  • طول و عرض جغرافیایی که به‌صورت درجه طبق تعریف مشخصات WGS84 مشخص می‌شود.
  • ارتفاع، که برحسب متر بالاتر از بیضی‌گون WGS84 مشخص می‌شود، یا تقریباً معادل متر بالاتر از سطح دریا است.
  • جهت، که جهت قرارگیری ژست را در سیستم مختصات EUS تخمین می‌زند. در سیستم مختصات EUS،‏ +X به شرق، +Y به بالا، و +Z به جنوب اشاره می‌کند.

Geospatial API دسترسی به حالت «زمین‌مکانی» دستگاه را فراهم می‌کند و تبدیل بین حالت‌های «زمین‌مکانی» و حالت‌های محلی دستگاه را ارائه می‌دهد.

پیش‌نیازها

برای دریافت و تبدیل حالت‌های «جغرافیایی-فضایی»، برنامه‌تان باید برای استفاده از Geospatial API راه‌اندازی شده باشد. حالت‌های Geospatial را فقط زمانی می‌توان دریافت کرد که Geospatial API دارای وضعیت RUNNING باشد.

تبدیل کردن حالت محلی دستگاه به حالت جغرافیایی

Pose محلی دستگاه را می‌توان به GeospatialPose تبدیل کرد، برای مثال، برای تعیین موقعیت دستگاه کاربر نسبت به زمین. این کار می‌تواند در موارد زیر به شما کمک کند:

  • محتوای واقعیت افزوده پایدار ایجاد کنید، که در آن شیء مجازی قرار داده‌شده توسط کاربر به‌طور دقیق به یک مکان جهانی متصل می‌شود تا بعداً بازیابی شود.
  • با به‌روزرسانی مداوم موقعیت کاربر روی نقشه، تجربه‌های مکان‌مبنا را راه‌اندازی کنید تا ناوبری هم‌زمان یا بازی با محدوده جغرافیایی فعال شود.
  • تعیین بافت دقیق کاربر در دنیای واقعی برای راه‌اندازی منطق برنامه مرتبط با مکان.

نمونه کد زیر نشان می‌دهد که چگونه می‌توان Pose را بااستفاده از Geospatial.createGeospatialPoseFromPose() به GeospatialPose تبدیل کرد.

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 محلی دستگاه تبدیل کنید. این تبدیل اطلاعات تعریف‌شده توسط مختصات دنیای واقعی، مانند مکان یک نشان، مسیر ناوبری، یا محتوای واقعیت افزوده پایدار را می‌گیرد و آن را به فضای بصری دقیق دستگاه کاربر تبدیل می‌کند.

نمونه کد زیر نحوه استفاده از 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
    }
}