XR_ANDROID_geospatial

Name String

XR_ANDROID_geospatial

Uzantı Türü

Örnek uzantısı

Kayıtlı Uzantı Numarası

790

Düzeltme

1

Onay Durumu

Onaylanmadı

Uzantı ve Sürüm Bağımlılıkları

XR_EXT_future

Son Değiştirilme Tarihi

2025-12-18

IP Durumu

Bilinen IP hak talebi yok.

Katkıda bulunanlar

John Ullman, Google
Ben King, Google
Nihav Jain, Google
Jared Finder, Google

Genel Bakış

Bu uzantı, Google'ın Geospatial API'si için Geospatial izleme sağlar. Bu API, hassas coğrafi konum ve yönlendirme sunar ve uygulamanın içeriği Dünya'ya göre yerleştirmesine olanak tanır. Bu işlem için hareket izleme, GPS ve diğer sensörlerin yanı sıra Google'ın Görsel Konumlandırma Sistemi (VPS) kullanılır. VPS, tam konum ve yön belirlemek için cihazın kamerasından alınan görüntüleri Street View görüntüleriyle karşılaştırır. Geospatial API genellikle bir metrenin altında konum doğruluğu (GPS'den çok daha iyi) ve bir derecenin altında yön doğruluğu sağlar.

Bu uzantıdaki API'leri (uzantı desteğini kontrol etme dışında) başarıyla kullanmak için uygulamanın XR_ANDROID_google_cloud_auth gibi bir mekanizma aracılığıyla kimlik doğrulama kimlik bilgilerini başarıyla ayarlamış olması gerekir . Kurulum ve hata sonuçları hakkında daha fazla bilgi için kimlik doğrulama uzantısının belgelerine bakın.

İzinler

Android uygulamalarının bu uzantıyı kullanabilmesi için manifest dosyalarında android.permission.ACCESS_FINE_LOCATION izninin listelenmesi gerekir. android.permission.ACCESS_FINE_LOCATION izni tehlikeli bir izin olarak kabul edilir. Uygulama, bu işlevleri kullanmak için çalışma zamanında izni istemelidir:

(Koruma düzeyi: tehlikeli)

Sistem kapasitesini inceleme

XrSystemGeospatialPropertiesANDROID yapısı şu şekilde tanımlanır:

typedef struct XrSystemGeospatialPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsGeospatial;
} XrSystemGeospatialPropertiesANDROID;

Üye Açıklamaları

  • type, bu yapının XrStructureType'ıdır.
  • next, NULL veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.
  • supportsGeospatial , geçerli sistemin coğrafi uzamsal özellikleri destekleyip desteklemediğini belirten bir XrBool32'dir.

Bir uygulama, xrGetSystemProperties çağrılırken XrSystemGeospatialPropertiesANDROID yapısını XrSystemProperties ile zincirleyerek sistemin coğrafi uzamsal özellikleri destekleyip desteklemediğini inceleyebilir.

Bir çalışma zamanı , supportsGeospatial için XR_FALSE döndürürse sistem, coğrafi uzamsal özellikleri desteklemez ve bu nedenle xrCreateGeospatialTrackerANDROID işlevinden XR_ERROR_FEATURE_UNSUPPORTED döndürmelidir . Uygulama, supportsGeospatial değeri XR_FALSE olduğunda coğrafi işlevsellik kullanmaktan kaçınmalıdır .

Geçerli Kullanım (Dolaylı)

Geospatial Tracker işleyeni oluşturma

XR_DEFINE_HANDLE(XrGeospatialTrackerANDROID)

xrCreateGeospatialTrackerANDROID işlevi şu şekilde tanımlanır:

XrResult xrCreateGeospatialTrackerANDROID(
    XrSession                                   session,
    const XrGeospatialTrackerCreateInfoANDROID* createInfo,
    XrGeospatialTrackerANDROID*                 geospatialTrackerOutput);

Parametre Açıklamaları

Bir uygulama, xrCreateGeospatialTrackerANDROID işlevini çağırarak XrGeospatialTrackerANDROID tutacağı oluşturabilir . Döndürülen XrGeospatialTrackerANDROID işleyici, API çağrılarında daha sonra kullanılabilir. Uygulama gerekli izinleri almadıysa çalışma zamanı mutlaka XR_ERROR_PERMISSION_INSUFFICIENT değerini döndürmelidir . Belirli bir XrSession için aynı anda yalnızca bir XrGeospatialTrackerANDROID olabilir . Uygulama, bu işlev tekrar çağrılmadan önce önceki XrGeospatialTrackerANDROID nesnelerinin yok edildiğinden emin olmalıdır. Aksi takdirde çalışma zamanı XR_ERROR_LIMIT_REACHED değerini döndürmelidir. İzleyici başarıyla oluşturulursa başlangıçta XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID durumuna girer ve uygulama, izleyiciyi kullanmadan önce durumun XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID olarak değişmesini beklemelidir. XrEventDataGeospatialTrackerStateChangedANDROID konusuna bakın . Uygulama, XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID durumunda olmayan bir XrGeospatialTrackerANDROID öğesini bunu gerektiren bir işleve iletiyorsa çalışma zamanı mutlaka XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID değerini döndürmelidir .

XrGeospatialTrackerANDROID tutacağı, xrDestroyGeospatialTrackerANDROID işlevi aracılığıyla sonunda serbest bırakılmalıdır.

Geçerli Kullanım (Dolaylı)

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Başarısız

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_PERMISSION_INSUFFICIENT
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

XrGeospatialTrackerCreateInfoANDROID yapısı şu şekilde tanımlanır:

typedef struct XrGeospatialTrackerCreateInfoANDROID {
    XrStructureType    type;
    const void*        next;
} XrGeospatialTrackerCreateInfoANDROID;

Üye Açıklamaları

  • type, bu yapının XrStructureType'ıdır.
  • next, NULL veya bir yapı zincirindeki sonraki yapının işaretçisidir.

Geçerli Kullanım (Dolaylı)

xrDestroyGeospatialTrackerANDROID işlevi şu şekilde tanımlanır:

XrResult xrDestroyGeospatialTrackerANDROID(
    XrGeospatialTrackerANDROID                  geospatialTracker);

Parametre Açıklamaları

Bir uygulama, coğrafi izleyiciyi ve temel kaynakları serbest bırakmak için xrDestroyGeospatialTrackerANDROID işlevini kullanabilir.

Geçerli Kullanım (Dolaylı)

Thread Safety

  • geospatialTracker ve tüm alt tanıtıcılarına erişim, harici olarak senkronize edilmelidir.

Dönüş Kodları

Başarılı

  • XR_SUCCESS

Başarısız

  • XR_ERROR_CALL_ORDER_INVALID
  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

Coğrafi Takip Cihazı Durumu

XrGeospatialTrackerStateANDROID numaralandırması şu şekilde tanımlanır:

typedef enum XrGeospatialTrackerStateANDROID {
    XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID = 0,
    XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID = 1,
    XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID = 2,
    XR_GEOSPATIAL_TRACKER_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrGeospatialTrackerStateANDROID;

XrGeospatialTrackerStateANDROID numaralandırması, bir coğrafi izleyicinin farklı durumlarını tanımlar.

Numaralandırılmış değerler aşağıdaki değerlere sahiptir:

Enum Açıklaması

XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID

Geospatial Tracker çalışmıyor.

XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID

Jeo-uzamsal takip cihazı çalışıyor ve kullanılabilir durumda.

XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID

Geospatial Tracker başlatılamadı ve hiçbir zaman kullanılamayacak.

XrEventDataGeospatialTrackerStateChangedANDROID yapısı şu şekilde tanımlanır:

typedef struct XrEventDataGeospatialTrackerStateChangedANDROID {
    XrStructureType                    type;
    const void*                        next;
    XrGeospatialTrackerANDROID         geospatialTracker;
    XrGeospatialTrackerStateANDROID    state;
    XrResult                           initializationResult;
    XrTime                             time;
} XrEventDataGeospatialTrackerStateChangedANDROID;

Üye Açıklamaları

  • type, bu yapının XrStructureType'ıdır.
  • next, NULL veya bir yapı zincirindeki sonraki yapının işaretçisidir.
  • geospatialTracker, durumu değişen XrGeospatialTrackerANDROID'dir.
  • state, yeni XrGeospatialTrackerStateANDROID'dir .
  • initializationResult, state değeri XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID ise hata sonucudur, aksi takdirde XR_SUCCESS olur .
  • time, durum değişikliğinin gerçekleştiği XrTime'dir.

XrEventDataGeospatialTrackerStateChangedANDROID yapısı, coğrafi izleyici durumu değiştiğinde gönderilir. Uygulamada geçerli bir XrGeospatialTrackerANDROID varsa bu etkinlik için yoklama yapılmalıdır. Bir izleyici için alınan ilk etkinlik state XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID değerine sahip olur . Çalışma zamanında belirlenen bir süre sonra durum kesinlikle XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID veya XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID olarak değişmelidir . Bu geçiş rastgele bir süre alır. state, XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID olarak değişirse bu izleyici için alınan son etkinlik olmalı ve initializationResult alanında hata kodu bulunmalıdır. Hatanın oluşması birkaç saniye sürebilir. Bu durumda uygulama, takip cihazını imha etmelidir. state XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID olarak değişirse daha önce oluşturulan tüm coğrafi uzamsal bağlantılar kalıcı olarak izlemeyi durdurmalı ve uygulama tarafından imha edilmelidir. Durum, XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID ve XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID arasında rastgele olarak birçok kez değişebilir.

Geçerli Kullanım (Dolaylı)

Coğrafi duruş

XrGeospatialPoseANDROID yapısı şu şekilde tanımlanır:

typedef struct XrGeospatialPoseANDROID {
    XrQuaternionf    eastUpSouthOrientation;
    double           latitude;
    double           longitude;
    double           altitude;
} XrGeospatialPoseANDROID;

Üye Açıklamaları

  • eastUpSouthOrientation, +X=Doğu, +Y=Yukarı ve +Z=Güney olan bir koordinat sistemine göre yönü tanımlayan bir XrQuaternionf'dir.
  • latitude, -90 ile +90 arasında derece cinsinden enlemdir.
  • longitude, -180 ile +180 arasında derece cinsinden boylamdır.
  • altitude, WGS84 elipsoidinin üzerindeki rakımı metre cinsinden ifade eder.

XrGeospatialPoseANDROID yapısı, WGS84 elipsoidini kullanarak Dünya'ya göre bir konumu ve yönü temsil eder.

Geçerli Kullanım (Dolaylı)

  • XR_ANDROID_geospatial uzantısı, XrGeospatialPoseANDROID kullanılmadan önce etkinleştirilmelidir.
  • latitude geçerli bir double değeri olmalıdır.
  • longitude geçerli bir double değeri olmalıdır.
  • altitude geçerli bir double değeri olmalıdır.

XrGeospatialPoseFlagBitsANDROID numaralandırması şu şekilde tanımlanır:

// Flag bits for XrGeospatialPoseFlagsANDROID
static const XrGeospatialPoseFlagsANDROID XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID = 0x00000001;
static const XrGeospatialPoseFlagsANDROID XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID = 0x00000002;

XrGeospatialPoseFlagBitsANDROID numaralandırması, coğrafi uzamsal pozlar için işaretleri belirtir.

İşaret bitleri aşağıdaki anlamlara sahiptir:

İşaret açıklamaları

  • XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID: Oryantasyon üyesinin geçerli veriler içerdiğini gösterir.
  • XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID: Konum üyesinin geçerli veriler içerdiğini gösterir.

XrGeospatialPoseFlagsANDROID türü, XrGeospatialPoseFlagBitsANDROID bit maskesidir .

typedef XrFlags64 XrGeospatialPoseFlagsANDROID;

XrPosef'i Geospatial Pose'a dönüştürme

xrLocateGeospatialPoseFromPoseANDROID işlevi şu şekilde tanımlanır:

XrResult xrLocateGeospatialPoseFromPoseANDROID(
    XrGeospatialTrackerANDROID                  geospatialTracker,
    const XrGeospatialPoseFromPoseLocateInfoANDROID* locateInfo,
    XrGeospatialPoseResultANDROID*              geospatialPoseResult);

Parametre Açıklamaları

xrLocateGeospatialPoseFromPoseANDROID işlevi, XrGeospatialPoseFromPoseLocateInfoANDROID :: space içindeki bir pozu coğrafi poza dönüştürür. geospatialTracker durumu XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID değilse çalışma zamanı XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID değerini döndürmelidir . İşlev XR_SUCCESS değerini döndürürse geospatialPoseResult öğesinin XrGeospatialPoseResultANDROID :: poseFlags alanı , hangi çıkış alanlarının geçerli olduğunu belirler. XrGeospatialPoseResultANDROID :: poseFlags içinde XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID ayarlanmamışsa uygulama , XrGeospatialPoseResultANDROID içinde XrGeospatialPoseANDROID :: latitude , XrGeospatialPoseANDROID :: longitude , XrGeospatialPoseANDROID :: altitude , XrGeospatialPoseResultANDROID :: horizontalAccuracy veya XrGeospatialPoseResultANDROID :: verticalAccuracy alanlarını okumamalıdır . XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID , XrGeospatialPoseResultANDROID :: poseFlags içinde ayarlanmamışsa uygulama XrGeospatialPoseANDROID :: eastUpSouthOrientation veya XrGeospatialPoseResultANDROID :: orientationYawAccuracy değerini okumamalıdır . XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID ayarlanmamışsa XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID da ayarlanmamalıdır.

Doğruluk beklenenden düşükse bu durum, cihazın VPS yerelleştirmesini kullanmadığını gösterebilir. Uygulama, yerelleştirmeyi iyileştirmek için kullanıcıya cihazını işaretlere ve binalara yönlendirmesini söyleyebilir.

Geçerli Kullanım (Dolaylı)

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Başarısız

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_POSE_INVALID
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_ERROR_VALIDATION_FAILURE

XrGeospatialPoseFromPoseLocateInfoANDROID yapısı şu şekilde tanımlanır:

typedef struct XrGeospatialPoseFromPoseLocateInfoANDROID {
    XrStructureType    type;
    const void*        next;
    XrSpace            space;
    XrTime             time;
    XrPosef            pose;
} XrGeospatialPoseFromPoseLocateInfoANDROID;

Üye Açıklamaları

  • type, bu yapının XrStructureType'ıdır.
  • next, NULL veya bir yapı zincirindeki sonraki yapının işaretçisidir.
  • space, pose öğesinin tanımlandığı XrSpace'tir.
  • time, pose değerinin hesaplanacağı XrTime değeridir .
  • pose, space içindeki XrPosef olup coğrafi uzamsal duruşa dönüştürülür.

Geçerli Kullanım (Dolaylı)

XrGeospatialPoseResultANDROID yapısı şu şekilde tanımlanır:

typedef struct XrGeospatialPoseResultANDROID {
    XrStructureType                 type;
    void*                           next;
    XrGeospatialPoseFlagsANDROID    poseFlags;
    XrGeospatialPoseANDROID         geospatialPose;
    double                          horizontalAccuracy;
    double                          verticalAccuracy;
    double                          orientationYawAccuracy;
} XrGeospatialPoseResultANDROID;

Üye Açıklamaları

  • type, bu yapının XrStructureType'ıdır.
  • next, NULL veya bir yapı zincirindeki sonraki yapının işaretçisidir.
  • poseFlags, poz bileşenlerinin geçerliliğini gösteren XrGeospatialPoseFlagsANDROID bit maskesidir.
  • geospatialPose, sonuçtaki XrGeospatialPoseANDROID'dir .
  • horizontalAccuracy, verilen enlem ve boylamın etrafındaki% 68 güven düzeyindeki dairenin metre cinsinden yarıçapı olarak tanımlanan, coğrafi duruş konumunun tahmini yatay doğruluğudur.
  • verticalAccuracy, Geospatial duruş konumunun tahmini dikey doğruluğudur. Belirli bir rakım etrafında% 68 güven düzeyindeki mesafeyi metre cinsinden ifade eder. Başka bir deyişle, gerçek yüksekliğin [ XrGeospatialPoseANDROID :: altitude - verticalAccuracy , XrGeospatialPoseANDROID :: altitude \+ verticalAccuracy ] aralığında olma olasılığı% 68'dir.
  • orientationYawAccuracy, verilen yönün etrafındaki% 68 güven düzeyinin derece cinsinden yarıçapı olarak tanımlanan, Coğrafi uzamsal duruş yönünün tahmini sapma doğruluğudur.

Geçerli Kullanım (Dolaylı)

Geospatial Pose'u XrPosef'e dönüştürme

xrLocateGeospatialPoseANDROID işlevi şu şekilde tanımlanır:

XrResult xrLocateGeospatialPoseANDROID(
    XrGeospatialTrackerANDROID                  geospatialTracker,
    const XrGeospatialPoseLocateInfoANDROID*    locateInfo,
    XrSpaceLocation*                            location);

Parametre Açıklamaları

xrLocateGeospatialPoseANDROID işlevi, coğrafi pozu XrSpaceLocation'a dönüştürür . XrGeospatialTrackerANDROID çalışmıyorsa çalışma zamanı XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID değerini döndürmelidir. İşlev XR_SUCCESS değerini döndürürse location öğesinin XrSpaceLocation :: locationFlags alanı , hangi çıkış alanlarının geçerli olduğunu belirler.

Geçerli Kullanım (Dolaylı)

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Başarısız

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROID
  • XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_ERROR_VALIDATION_FAILURE

XrGeospatialPoseLocateInfoANDROID yapısı şu şekilde tanımlanır:

typedef struct XrGeospatialPoseLocateInfoANDROID {
    XrStructureType            type;
    const void*                next;
    XrSpace                    space;
    XrTime                     time;
    XrGeospatialPoseANDROID    geospatialPose;
} XrGeospatialPoseLocateInfoANDROID;

Üye Açıklamaları

  • type, bu yapının XrStructureType'ıdır.
  • next, NULL veya bir yapı zincirindeki sonraki yapının işaretçisidir.
  • space, ortaya çıkan pozun temsil edileceği XrSpace'tir.
  • time, pozu yerleştireceğiniz XrTime'dir.
  • geospatialPose, dönüştürülecek XrGeospatialPoseANDROID'dir.

Geçerli Kullanım (Dolaylı)

VPS Kullanılabilirliği

XrVPSAvailabilityANDROID numaralandırması şu şekilde tanımlanır:

typedef enum XrVPSAvailabilityANDROID {
    XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID = 1,
    XR_VPS_AVAILABILITY_AVAILABLE_ANDROID = 2,
    XR_VPSAVAILABILITY_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrVPSAvailabilityANDROID;

XrVPSAvailabilityANDROID numaralandırması, VPS'nin kullanılabilirliğini gösterir.

Numaralandırılmış değerler aşağıdaki değerlere sahiptir:

Enum Açıklaması

XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID

VPS, belirtilen konumun yakınında kullanılamaz.

XR_VPS_AVAILABILITY_AVAILABLE_ANDROID

VPS, belirtilen konumun yakınında kullanılabilir.

xrCheckVpsAvailabilityAsyncANDROID işlevi şu şekilde tanımlanır:

XrResult xrCheckVpsAvailabilityAsyncANDROID(
    XrSession                                   session,
    double                                      latitude,
    double                                      longitude,
    XrFutureEXT*                                future);

Parametre Açıklamaları

  • session, kontrol için kullanılacak XrSession'dır.
  • latitude, enlemin derece cinsinden değeridir.
  • longitude, derece cinsinden boylamdır.
  • future, eşzamansız işlemin sonucunu tutacak olan XrFutureEXT işaretçisidir.

Görsel Konumlandırma Hizmeti (VPS) kullanılabilirliği, belirli bir konumda coğrafi uzamsal doğruluğu artırmak için VPS'nin kullanılıp kullanılamayacağını gösterir.

xrCheckVpsAvailabilityAsyncANDROID işlevi, belirli bir konumda VPS kullanılabilirliği için eşzamansız bir kontrol başlatır. Uygulamanın bu işlevi çağırmak için XrGeospatialTrackerANDROID'e ihtiyacı yoktur ve bir tane oluşturup oluşturmayacağına karar vermek için bu işlemin sonucunu kullanabilir. Uygulama gerekli izinleri almadıysa çalışma zamanı mutlaka XR_ERROR_PERMISSION_INSUFFICIENT değerini döndürmelidir .

Geçerli Kullanım (Dolaylı)

  • xrCheckVpsAvailabilityAsyncANDROID çağrılmadan önce XR_ANDROID_geospatial uzantısı etkinleştirilmelidir.
  • session geçerli bir XrSession işleyeni olmalıdır.
  • latitude geçerli bir double değeri olmalıdır.
  • longitude geçerli bir double değeri olmalıdır.
  • future, XrFutureEXT değerine yönelik bir işaretçi olmalıdır.

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Başarısız

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROID
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

xrCheckVpsAvailabilityCompleteANDROID işlevi şu şekilde tanımlanır:

XrResult xrCheckVpsAvailabilityCompleteANDROID(
    XrSession                                   session,
    XrFutureEXT                                 future,
    XrVPSAvailabilityCheckCompletionANDROID*    completion);

Parametre Açıklamaları

Geçerli Kullanım (Dolaylı)

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Başarısız

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_FUTURE_INVALID_EXT
  • XR_ERROR_FUTURE_PENDING_EXT
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

XrVPSAvailabilityCheckCompletionANDROID yapısı şu şekilde tanımlanır:

typedef struct XrVPSAvailabilityCheckCompletionANDROID {
    XrStructureType             type;
    void*                       next;
    XrResult                    futureResult;
    XrVPSAvailabilityANDROID    availability;
} XrVPSAvailabilityCheckCompletionANDROID;

Üye Açıklamaları

  • type, bu yapının XrStructureType'ıdır.
  • next, NULL veya bir yapı zincirindeki sonraki yapının işaretçisidir.
  • futureResult, kontrol işleminin XrResult değeridir. futureResult XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID ise next zincirindeki bir yapı , hata hakkında daha fazla bilgi sağlayabilir.
  • availability, sonuçta elde edilen XrVPSAvailabilityANDROID değeridir . Uygulama, futureResult değeri XR_SUCCESS olmadığı sürece bu alanı okumamalıdır .

Gelecekteki İade Kodları

futureResult değerleri:

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Başarısız

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID

Geçerli Kullanım (Dolaylı)

Örnek

Geospatial Tracker'ı ayarlama

PFN_xrCheckVpsAvailabilityAsyncANDROID xrCheckVpsAvailabilityAsyncANDROID;
PFN_xrPollFutureEXT xrPollFutureEXT;
PFN_xrCheckVpsAvailabilityCompleteANDROID xrCheckVpsAvailabilityCompleteANDROID;
PFN_xrCreateGeospatialTrackerANDROID xrCreateGeospatialTrackerANDROID;
XrInstance instance = XR_NULL_HANDLE;
XrSystemId systemId = XR_NULL_SYSTEM_ID;
XrSession session = XR_NULL_HANDLE;
double lat = 37.422, lng = -122.084;

// Check for support.
XrSystemGeospatialPropertiesANDROID geospatialSystemProperties{
    XR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROID};
XrSystemProperties systemProperties{XR_TYPE_SYSTEM_PROPERTIES,
                                    &geospatialSystemProperties};
CHK_XR(xrGetSystemProperties(instance, systemId, &systemProperties));
if (!geospatialSystemProperties.supportsGeospatial) {
  return;
}

// Check VPS Availability.
XrFutureEXT future = XR_NULL_FUTURE_EXT;
CHK_XR(xrCheckVpsAvailabilityAsyncANDROID(session, lat, lng, &future));

XrFuturePollInfoEXT pollInfo{XR_TYPE_FUTURE_POLL_INFO_EXT};
XrFuturePollResultEXT pollResult{XR_TYPE_FUTURE_POLL_RESULT_EXT};
pollInfo.future = future;
pollResult.state = XR_FUTURE_STATE_PENDING_EXT;
while (pollResult.state == XR_FUTURE_STATE_PENDING_EXT) {
  // Do in render loop/state loop.
  CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));
}

XrVPSAvailabilityCheckCompletionANDROID vpsCompletion{
    XR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID};
CHK_XR(xrCheckVpsAvailabilityCompleteANDROID(session, future, &vpsCompletion));
if (vpsCompletion.futureResult == XR_SUCCESS) {
  if (vpsCompletion.availability == XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID) {
    // Visual Positioning Service is not available. Accuracy of positions and
    // orientations from Geospatial APIs are expected to be lower at this location.
  } else {
    // Visual Positioning Service is available. Higher accuracy of position and
    // orientation is achievable at this location.
  }
}

// Create Geospatial Tracker.
XrGeospatialTrackerCreateInfoANDROID createInfo{
    XR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROID};
XrGeospatialTrackerANDROID geospatialTracker = XR_NULL_HANDLE;
CHK_XR(xrCreateGeospatialTrackerANDROID(session, &createInfo, &geospatialTracker));

// In application main event loop:
while (true) {
  XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
  if (xrPollEvent(instance, &event) != XR_SUCCESS) {
    continue;
  }
  switch (event.type) {
    case XR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROID:
      const XrEventDataGeospatialTrackerStateChangedANDROID& eventData =
          *reinterpret_cast<XrEventDataGeospatialTrackerStateChangedANDROID*>(&event);
      switch (eventData.state) {
        case XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID:
          // Destroy existing anchors, if any.
          break;
        case XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID:
          // Start adding content.
          break;
        case XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID:
          // Handle eventData.initializationResult error result.
          break;
      }
  }
}

Geospatial Pose API'lerini çağırma

PFN_xrLocateGeospatialPoseFromPoseANDROID xrLocateGeospatialPoseFromPoseANDROID;
PFN_xrLocateGeospatialPoseANDROID xrLocateGeospatialPoseANDROID;

XrGeospatialTrackerANDROID geospatialTracker;

// Get pose from view space.
XrSpace viewSpace;
XrPosef identityPose = {{0,0,0,1},{0,0,0}};
XrGeospatialPoseFromPoseLocateInfoANDROID poseGetInfo{
    XR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROID};
XrGeospatialPoseResultANDROID poseResult{
    XR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROID};
poseGetInfo.space = viewSpace;
poseGetInfo.pose = identityPose;
poseGetInfo.time = 0;  // Next frame timestamp.
CHK_XR(xrLocateGeospatialPoseFromPoseANDROID(geospatialTracker, &poseGetInfo, &poseResult));
if ((poseResult.poseFlags & XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID) &&
    (poseResult.poseFlags & XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID)) {
  // poseResult.geospatialPose is valid.
}

// Convert Geospatial pose to an XrSpaceLocation.
XrGeospatialPoseLocateInfoANDROID poseLocateInfo{
    XR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROID};
XrSpaceLocation location{XR_TYPE_SPACE_LOCATION};
poseLocateInfo.space = viewSpace;
poseLocateInfo.geospatialPose = poseResult.geospatialPose;
poseLocateInfo.time = 0; // Next frame timestamp.
CHK_XR(xrLocateGeospatialPoseANDROID(geospatialTracker, &poseLocateInfo, &location));
if ((location.locationFlags & XR_SPACE_LOCATION_ORIENTATION_VALID_BIT) &&
    (location.locationFlags & XR_SPACE_LOCATION_POSITION_VALID_BIT)) {
  // location.pose is valid.
}

Yeni Nesne Türleri

Yeni Komutlar

Yeni Yapılar

Yeni Sıralamalar

Yeni bit maskeleri

Yeni Numaralandırılmış Değer Sabitleri

  • XR_ANDROID_GEOSPATIAL_EXTENSION_NAME
  • XR_ANDROID_geospatial_SPEC_VERSION
  • XrObjectType'i genişletme :

    • XR_OBJECT_TYPE_GEOSPATIAL_TRACKER_ANDROID
  • XrResult'ı genişletme :

    • XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID
    • XR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROID
    • XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
  • XrStructureType'ı genişletme :

    • XR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROID
    • XR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROID
    • XR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROID
    • XR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROID
    • XR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROID
    • XR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROID
    • XR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID

Sorunlar

Sürüm Geçmişi

  • 1. düzeltme, 18.12.2025 (Ben King)

    • İlk uzantı açıklaması.