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,NULLveya 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 birXrBool32değ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ı)
- XrSystemGeospatialPropertiesANDROID kullanılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir -
typeXR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
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ı
session, coğrafi konum izleyicinin etkin olacağı bir XrSession'dır.createInfo, ilk coğrafi izleyici parametrelerini belirten bir XrGeospatialTrackerCreateInfoANDROID yapısına işaret eder.geospatialTrackerOutput, oluşturulan XrGeospatialTrackerANDROID'nin döndürüldüğü bir herkese açık kullanıcı adına işaretçidir.
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ı)
- xrCreateGeospatialTrackerANDROID çağrılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir -
sessiongeçerli bir XrSession herkese açık kullanıcı adı olmalıdır -
createInfo, geçerli bir XrGeospatialTrackerCreateInfoANDROID yapısına işaret eden bir işaretçi olmalıdır. -
geospatialTrackerOutput, bir XrGeospatialTrackerANDROID herkese açık adına işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_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,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir.
Geçerli Kullanım (Dolaylı)
- XrGeospatialTrackerCreateInfoANDROID kullanılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir -
typeXR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. Ayrıca bkz. XrGeospatialTrackerAnchorTrackingInfoANDROID
xrDestroyGeospatialTrackerANDROID işlevi şu şekilde tanımlanır:
XrResult xrDestroyGeospatialTrackerANDROID(
XrGeospatialTrackerANDROID geospatialTracker);
Parametre Açıklamaları
geospatialTracker, imha edilecek XrGeospatialTrackerANDROID'dir.
Uygulamalar, coğrafi konumsal izleyiciyi ve temel kaynakları serbest bırakmak için xrDestroyGeospatialTrackerANDROID işlevini kullanabilir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_geospatialuzantısı, xrDestroyGeospatialTrackerANDROID çağrılmadan önce etkinleştirilmelidir -
geospatialTrackergeçerli bir XrGeospatialTrackerANDROID herkese açık hesap adı olmalıdır
İleti Dizisi Güvenliği
geospatialTrackerve tüm alt herkese açık kullanıcı adlarına erişim harici olarak senkronize edilmelidir.
Dönüş Kodları
XR_SUCCESS
XR_ERROR_CALL_ORDER_INVALIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_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,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir.geospatialTracker, durumu değişen XrGeospatialTrackerANDROID'dir.state, yeni XrGeospatialTrackerStateANDROID'dir.initializationResult,stateXR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROIDise hata sonucudur, aksi takdirdeXR_SUCCESS.time, durum değişikliğinin gerçekleştiğiXrTimedeğ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ı)
- XrEventDataGeospatialTrackerStateChangedANDROID kullanılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir. -
typeXR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
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_geospatialuzantısı etkinleştirilmelidir. -
latitudegeçerli birdoubledeğeri olmalıdır -
longitudegeçerli birdoubledeğeri olmalıdır -
altitudegeçerli birdoubledeğ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ı
geospatialTracker, dönüşüm için kullanılacak XrGeospatialTrackerANDROID'dir.locateInfo, sorgu parametrelerini içeren XrGeospatialPoseFromPoseLocateInfoANDROID'e işaret eden bir göstergedir.geospatialPoseResult, sonucu alan XrGeospatialPoseResultANDROID'e işaret eder.
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ı)
-
XR_ANDROID_geospatialuzantısı, xrLocateGeospatialPoseFromPoseANDROID çağrılmadan önce etkinleştirilmelidir. -
geospatialTrackergeçerli bir XrGeospatialTrackerANDROID herkese açık hesap adı olmalıdır -
locateInfo, geçerli bir XrGeospatialPoseFromPoseLocateInfoANDROID yapısına işaret eden bir işaretçi olmalıdır. -
geospatialPoseResult, bir XrGeospatialPoseResultANDROID yapısına işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROIDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_POSE_INVALIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_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,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir.space,poseöğesinin tanımlandığı XrSpace'tir.time,posedeğerinin değerlendirileceğiXrTimedeğeridir.pose, coğrafi konumsal poza dönüştürülecekspaceiçindeki XrPosef'dir.
Geçerli Kullanım (Dolaylı)
- XrGeospatialPoseFromPoseLocateInfoANDROID kullanılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir. -
typeXR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
spacegeçerli bir XrSpace hesabı olmalıdır
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,NULLveya 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ı)
- XrGeospatialPoseResultANDROID kullanılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir. -
typeXR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
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ı
geospatialTracker, dönüşüm için kullanılacak XrGeospatialTrackerANDROID'dir.locateInfo, sorgu parametrelerini içeren XrGeospatialPoseLocateInfoANDROID'e işaret eden bir işaretçidir.location, sonuçta elde edilen pozu alan XrSpaceLocation'a işaret eden bir göstergedir.
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ı)
-
XR_ANDROID_geospatialuzantısı, xrLocateGeospatialPoseANDROID çağrılmadan önce etkinleştirilmelidir. -
geospatialTrackergeçerli bir XrGeospatialTrackerANDROID herkese açık hesap adı olmalıdır -
locateInfo, geçerli bir XrGeospatialPoseLocateInfoANDROID yapısına işaretçi olmalıdır. -
location, bir XrSpaceLocation yapısına işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROIDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_POSE_INVALIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_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,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir.space, elde edilen pozun temsil edileceği XrSpace'tir.time, pozun bulunacağıXrTimedeğeridir.geospatialPose, dönüştürülecek XrGeospatialPoseANDROID değeridir.
Geçerli Kullanım (Dolaylı)
- XrGeospatialPoseLocateInfoANDROID kullanılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir. -
typeXR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
spacegeçerli bir XrSpace hesabı olmalıdır -
geospatialPosegeçerli bir XrGeospatialPoseANDROID yapısı olmalıdır
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 olanXrFutureEXTiç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_geospatialuzantısı, xrCheckVpsAvailabilityAsyncANDROID çağrılmadan önce etkinleştirilmelidir. -
sessiongeçerli bir XrSession herkese açık kullanıcı adı olmalıdır -
latitudegeçerli birdoubledeğeri olmalıdır -
longitudegeçerli birdoubledeğeri olmalıdır -
future, birXrFutureEXTdeğerine işaretçi olmalıdır
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
xrCheckVpsAvailabilityCompleteANDROID işlevi şu şekilde tanımlanır:
XrResult xrCheckVpsAvailabilityCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrVPSAvailabilityCheckCompletionANDROID* completion);
Parametre Açıklamaları
session, kontrol için kullanılan XrSession'dır.future, xrCheckVpsAvailabilityAsyncANDROID tarafından döndürülenXrFutureEXTdeğeridir.completion, sonucu alan XrVPSAvailabilityCheckCompletionANDROID'e yönelik bir işaretçidir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_geospatialuzantısı, xrCheckVpsAvailabilityCompleteANDROID çağrılmadan önce etkinleştirilmelidir. -
sessiongeçerli bir XrSession herkese açık kullanıcı adı olmalıdır -
completion, bir XrVPSAvailabilityCheckCompletionANDROID yapısına işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_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,NULLveya 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_ANDROIDisenextzincirindeki bir yapı, hatayla ilgili daha fazla bilgi sağlayabilir.availability, sonuçta elde edilen XrVPSAvailabilityANDROID değeridir.futureResult,XR_SUCCESSolmadığı sürece uygulama bu alanı okumamalıdır.
Gelecekteki İade Kodları
futureResult değer:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID
Geçerli Kullanım (Dolaylı)
- XrVPSAvailabilityCheckCompletionANDROID kullanılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir. -
typeXR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
futureResultgeçerli bir XrResult değeri olmalıdır -
availabilitygeçerli bir XrVPSAvailabilityANDROID değeri olmalıdır.
Ö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
- xrCheckVpsAvailabilityAsyncANDROID
- xrCheckVpsAvailabilityCompleteANDROID
- xrCreateGeospatialTrackerANDROID
- xrDestroyGeospatialTrackerANDROID
- xrLocateGeospatialPoseANDROID
- xrLocateGeospatialPoseFromPoseANDROID
Yeni Yapılar
- XrEventDataGeospatialTrackerStateChangedANDROID
- XrGeospatialPoseANDROID
- XrGeospatialPoseFromPoseLocateInfoANDROID
- XrGeospatialPoseLocateInfoANDROID
- XrGeospatialPoseResultANDROID
- XrGeospatialTrackerCreateInfoANDROID
- XrVPSAvailabilityCheckCompletionANDROID
XrSystemProperties'i genişletme:
Yeni Enum Veri Türleri
Yeni Bit Maskeleri
Yeni Enum Sabitleri
XR_ANDROID_GEOSPATIAL_EXTENSION_NAMEXR_ANDROID_geospatial_SPEC_VERSIONXrObjectType'i genişletme:
XR_OBJECT_TYPE_GEOSPATIAL_TRACKER_ANDROID
XrResult'ı genişletme:
XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROIDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
XrStructureType'ı genişletme:
XR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROIDXR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROIDXR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROIDXR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROIDXR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROIDXR_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ı.