XR_ANDROID_geospatial

Name String

XR_ANDROID_geospatial

Uzantı Türü

Örnek uzantısı

Kayıtlı Dahili Numara

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 bir fikri mülkiyet 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 coğrafi konum izleme özelliği sağlar. Bu özellik, hassas coğrafi konum ve yön bilgisi sunar ve uygulamanın içeriği Dünya'ya göre yerleştirmesine olanak tanır. Bunu yapmak için hareket izleme, GPS ve diğer sensörlerin yanı sıra Google'ın Görsel Konumlandırma Sistemi'ni (VPS) kullanır. VPS, tam konumu ve yönü belirlemek için cihaz kamerasından alınan görüntüleri Street View görüntüleriyle karşılaştırır. Geospatial API, genellikle bir metreden daha az konum doğruluğu (GPS'ten çok daha iyi) ve bir dereceden daha az yön doğruluğu sağlar.

Bu uzantıdaki API'leri başarıyla kullanmak için (uzantı desteğini kontrol etmenin yanı sıra) uygulamanın, XR_ANDROID_google_cloud_auth gibi bir mekanizma aracılığıyla kimlik doğrulama bilgilerini başarıyla ayarlamış olması gerekir. Kurulum ve hata sonuçları hakkında daha fazla bilgi için Auth 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, aşağıdaki işlevleri kullanmak için çalışma zamanında izin istemelidir:

(koruma düzeyi: tehlikeli)

Sistem özelliğini 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 değeridir.
  • next, NULL veya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.
  • supportsGeospatial, mevcut sistemin coğrafi özellikleri destekleyip desteklemediğini gösteren bir XrBool32 değeridir.

Uygulama, xrGetSystemProperties işlevini çağırırken XrSystemProperties'e bir XrSystemGeospatialPropertiesANDROID yapısı ekleyerek sistemin coğrafi özellikleri destekleyip desteklemediğini kontrol edebilir.

Bir çalışma zamanı supportsGeospatial için XR_FALSE döndürürse sistem, coğrafi özellikleri desteklemez ve bu nedenle xrCreateGeospatialTrackerANDROID'den XR_ERROR_FEATURE_UNSUPPORTED döndürmesi gerekir. supportsGeospatial, XR_FALSE olduğunda uygulama, coğrafi konum işlevini kullanmaktan kaçınmalıdır.

Geçerli Kullanım (Dolaylı)

Geospatial Tracker herkese açık kullanıcı adı 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ı

Uygulamalar, xrCreateGeospatialTrackerANDROID işlevini çağırarak XrGeospatialTrackerANDROID tanıtıcısı oluşturabilir. Döndürülen XrGeospatialTrackerANDROID herkese açık kullanıcı adı daha sonra API çağrılarında kullanılabilir. Uygulama gerekli izinleri almadıysa çalışma zamanı XR_ERROR_PERMISSION_INSUFFICIENT değerini döndürmelidir (must). Belirli bir XrSession için aynı anda yalnızca bir XrGeospatialTrackerANDROID olabilir. Uygulama, bu işlevi tekrar çağırmadan önce önceki XrGeospatialTrackerANDROID nesnelerinin imha edildiğinden emin olmalıdır. Aksi takdirde çalışma zamanı XR_ERROR_LIMIT_REACHED değerini döndürmelidir. Takipçi başarıyla oluşturulursa başlangıçta XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID durumuna girer ve uygulama, takipçiyi kullanmadan önce durumun XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID olarak değişmesini beklemelidir. XrEventDataGeospatialTrackerStateChangedANDROID sayfasına bakın. Uygulama, XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID durumunda olmayan bir XrGeospatialTrackerANDROID'i gerektiren bir işleve iletirse çalışma zamanı XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID değerini döndürmelidir .

XrGeospatialTrackerANDROID herkese açık kullanıcı adı, xrDestroyGeospatialTrackerANDROID işlevi aracılığıyla serbest bırakılmalıdır (zorunlu).

Geçerli Kullanım (Dolaylı)

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Hata

  • 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 değeridir.
  • next, NULL veya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir.

Geçerli Kullanım (Dolaylı)

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

XrResult xrDestroyGeospatialTrackerANDROID(
    XrGeospatialTrackerANDROID                  geospatialTracker);

Parametre Açıklamaları

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

Geçerli Kullanım (Dolaylı)

İleti Dizisi Güvenliği

  • geospatialTracker ve tüm alt herkese açık kullanıcı adlarına erişim harici olarak senkronize edilmelidir.

Dönüş Kodları

Başarılı

  • XR_SUCCESS

Hata

  • XR_ERROR_CALL_ORDER_INVALID
  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

Coğrafi İzleyici Durumu

XrGeospatialTrackerStateANDROID sıralaması ş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ı, coğrafi takipçinin farklı durumlarını tanımlar.

Numaralandırıcılar 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

Geospatial Tracker çalışıyor ve kullanılabilir.

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 değeridir.
  • next, NULL veya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir.
  • geospatialTracker, durumu değişen XrGeospatialTrackerANDROID'dir.
  • state, yeni XrGeospatialTrackerStateANDROID'dir.
  • initializationResult, state XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID ise hata sonucudur, aksi takdirde XR_SUCCESS .
  • time, durum değişikliğinin gerçekleştiği XrTime değeridir.

Coğrafi izleyici durumu değiştiğinde XrEventDataGeospatialTrackerStateChangedANDROID yapısı gönderilir. Uygulamada geçerli bir XrGeospatialTrackerANDROID varsa bu etkinlik için sorgulama yapmalıdır. Bir takipçi için alınan ilk etkinlikte state XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID olur. Çalışma zamanına göre belirlenen bir süre geçtikten sonra durum 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ıdır ve initializationResult alanı hata kodunu içerir. Hatanın oluşması birkaç saniye sürebilir. Bu durumda uygulama, izleyiciyi imha etmelidir. state, XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID olarak değişirse daha önce oluşturulan tüm coğrafi yer işaretlerinin izleme işlemini kalıcı olarak durdurması gerekir ve uygulama tarafından yok edilmesi gerekir. Durum, XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID ve XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID arasında dilediğiniz kadar değişebilir.

Geçerli Kullanım (Dolaylı)

Coğrafi Konum

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 değeridir.
  • latitude, -90 ile +90 arasında derece cinsinden enlemdir.
  • longitude, -180 ile +180 arasında derece cinsinden boylamdır.
  • altitude, WGS84 elipsoidinin üzerindeki metre cinsinden rakımdır.

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

Geçerli Kullanım (Dolaylı)

  • XrGeospatialPoseANDROID kullanılmadan önce XR_ANDROID_geospatial uzantısı 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 konum pozları için işaretleri belirtir.

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

İşaret Açıklamaları

  • XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID: Yönlendirme ü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'in 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 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çindeki XrGeospatialPoseANDROID :: latitude , XrGeospatialPoseANDROID :: longitude , XrGeospatialPoseANDROID :: altitude , XrGeospatialPoseResultANDROID :: horizontalAccuracy veya XrGeospatialPoseResultANDROID :: verticalAccuracy alanlarını okumamalıdır. XrGeospatialPoseResultANDROID :: poseFlags içinde XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID 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 de ayarlanmamalıdır.

Doğruluk beklenenden düşükse bu, cihazın VPS yerelleştirmesini kullanmadığının bir göstergesi olabilir. Uygulama, yerelleştirmeyi iyileştirmek için kullanıcıya cihazını tabelalara ve binalara doğrultma talimatı verebilir.

Geçerli Kullanım (Dolaylı)

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Hata

  • 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 değeridir.
  • next, NULL veya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir.
  • space, pose öğesinin tanımlandığı XrSpace'tir.
  • time, pose değerinin değerlendirileceği XrTime değeridir.
  • pose, coğrafi konumsal poza dönüştürülecek space içindeki XrPosef'dir.

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 değeridir.
  • next, NULL veya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir.
  • poseFlags, poz bileşenlerinin geçerliliğini gösteren bir XrGeospatialPoseFlagsANDROID bit maskesidir.
  • geospatialPose, elde edilen XrGeospatialPoseANDROID'dir.
  • horizontalAccuracy, Geospatial poz konumunun tahmini yatay doğruluğudur. Bu değer, belirli bir enlem ve boylam etrafında% 68 güven düzeyine sahip dairenin metre cinsinden yarıçapı olarak tanımlanır.
  • verticalAccuracy, Geospatial poz konumunun tahmini dikey doğruluğudur. Bu değer, belirli bir rakım etrafında% 68 güven düzeyinin metre cinsinden mesafesi olarak tanımlanır. Diğer bir deyişle, gerçek rakımın [ XrGeospatialPoseANDROID :: altitude - verticalAccuracy , XrGeospatialPoseANDROID :: altitude \+ verticalAccuracy ] aralığında olma olasılığı% 68'dir.
  • orientationYawAccuracy, Geospatial poz yönünün tahmini sapma doğruluğudur. Belirli bir yön etrafında% 68 güven düzeyinin derece cinsinden yarıçapı olarak tanımlanır.

Geçerli Kullanım (Dolaylı)

Coğrafi Konumu 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 konumu 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

Hata

  • 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_POSE_INVALID
  • 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 değeridir.
  • next, NULL veya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir.
  • space, elde edilen pozun temsil edileceği XrSpace'tir.
  • time, pozun bulunacağı XrTime değeridir.
  • geospatialPose, dönüştürülecek XrGeospatialPoseANDROID değeridir.

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 kullanılabilirliğini gösterir.

Numaralandırıcılar aşağıdaki değerlere sahiptir:

Enum Açıklaması

XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID

Belirtilen konumun yakınında VPS kullanılamıyor.

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, derece cinsinden enlemdir.
  • longitude, derece cinsinden boylamdır.
  • future, eşzamansız işlemin sonucunu tutacak olan XrFutureEXT için bir işaretçidir.

Görsel Konumlama Hizmeti (VPS) kullanılabilirliği, VPS'nin belirli bir konumda coğrafi doğruluğu artırmak için 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 bu işlemin sonucunu kullanarak bir tane oluşturup oluşturmayacağına karar verebilir. Uygulama gerekli izinleri almadıysa çalışma zamanı XR_ERROR_PERMISSION_INSUFFICIENT değerini döndürmelidir (must).

Geçerli Kullanım (Dolaylı)

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

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Hata

  • 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

Hata

  • 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 değeridir.
  • next, NULL veya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir.
  • futureResult, kontrol işleminin XrResult değeridir. futureResult, XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID ise next zincirindeki bir yapı, hatayla ilgili daha fazla bilgi sağlayabilir.
  • availability, sonuçta elde edilen XrVPSAvailabilityANDROID değeridir. futureResult, XR_SUCCESS olmadığı sürece uygulama bu alanı okumamalıdır.

Gelecekteki İade Kodları

futureResult değer:

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Hata

  • 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 Enum Veri Türleri

Yeni Bit Maskeleri

Yeni Enum 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

  • Düzeltme 1, 18.12.2025 (Ben King)

    • İlk uzantı açıklaması.