Geospatial API, yüksek doğruluklu Coğrafi pozlar oluşturmak için VPS ve GPS verilerinin bir kombinasyonunu kullanır. API, cihazın konumunu belirleyebildiği her yerde kullanılabilir:
- API, kapalı alanlar ve yoğun kentsel ortamlar gibi GPS doğruluğunun düşük olduğu alanlarda yüksek isabetli pozlar oluşturmak için VPS'nin kapsamını kullanır.
- Geospatial API, yukarıdan engellerin çok az olduğu veya hiç olmadığı dış ortamlarda, yüksek doğrulukla Coğrafi pozisyonlar oluşturmak için mevcut GPS konum verilerini kullanabilir.
AR oturumu başlamadan önce belirli bir yatay konumda VPS'nin kullanılabilirliğini belirleyebilir ve daha spesifik deneyimler oluşturmak için (örneğin, yalnızca VPS kullanılabilir olduğunda "AR'ye Gir" düğmesi sunmak için) kullanabilirsiniz.
ARCore API'yi etkinleştir
VPS'nin kullanılabilirliğini kontrol etmek için uygulamanız ARCore API'sini etkinleştirmelidir.
ARCore API etkinleştirildikten sonra, VPS kullanılabilirliğini aşağıdakileri olmadan kontrol edebilirsiniz:
- Mevcut durumda çalışan bir
ArSession
(ArSession_resume()
çağrısından önce). ArGeospatialMode
ayarlanıyor.
Uygulamanızda VPS kullanılabilirliğini kontrol edin
Geospatial API, cihazın konumunu belirleyebildiği her yerde kullanılabilir. Artırılmış gerçeklik deneyiminiz VPS kapsamına dayanıyorsa ArSession_checkVpsAvailabilityAsync()
aracını kullanarak bir ArVpsAvailabilityFuture
elde edebilirsiniz. Bu, belirli bir yatay konumdaki VPS kullanılabilirliğini kontrol eden eşzamansız bir görevdir.
ArVpsAvailabilityFuture
oluşturduktan sonra anketin sonucunu yoklama veya geri çağırma yoluyla elde edebilirsiniz.
Sonucu anketle
ArFuture
durumunu almak için ArFuture_getState()
kodunu kullanın. Üç farklı durum vardır:
AR_FUTURE_STATE_PENDING
: İşlem henüz tamamlanmadığından bilinmiyor.AR_FUTURE_STATE_CANCELLED
: İşlemArFuture_cancel()
tarafından iptal edildi. Kayıtlı geri arama aramaları hiçbir zaman çağrılmaz.AR_FUTURE_STATE_DONE
: İşlem tamamlandı. Sonucu almak içinArVpsAvailabilityFuture_getResult()
işlevini kullanın.
Görev tamamlanana kadar ArFuture_getState()
simgesini kontrol etmeye devam edebilirsiniz.
// Obtain a ArVpsAvailabilityFuture and store it somewhere. ArVpsAvailabilityFuture* future = NULL; CHECK(ArSession_checkVpsAvailabilityAsync(ar_session, latitude, longitude, NULL, NULL, &future) == AR_SUCCESS); // Poll ArVpsAvailabilityFuture later, for example, in a render loop. ArFutureState future_state = AR_FUTURE_STATE_PENDING; ArFuture_getState(ar_session, (ArFuture*)future, &future_state); if (future_state == AR_FUTURE_STATE_DONE) { ArVpsAvailability vps_availability = AR_VPS_AVAILABILITY_UNKNOWN; ArVpsAvailabilityFuture_getResult(ar_session, future, &vps_availability); switch (vps_availability) { case AR_VPS_AVAILABILITY_AVAILABLE: // VPS is available at this location. break; case AR_VPS_AVAILABILITY_UNAVAILABLE: // VPS is unavailable at this location. break; case AR_VPS_AVAILABILITY_ERROR_NETWORK_CONNECTION: // The external service could not be reached due to a network connection // error. break; // Handle other error states, e.g. // AR_VPS_AVAILABILITY_ERROR_RESOURCE_EXHAUSTED, // AR_VPS_AVAILABILITY_ERROR_INTERNAL, ... } ArFuture_release((ArFuture*)future); }
Geri arama yoluyla sonucu elde etme
ArFuture
işleminin sonucunu geri çağırma yoluyla da alabilirsiniz. ArSession_checkVpsAvailabilityAsync()
kullanın ve bir callback
sağlayın. ArFuture
öğesinin AR_FUTURE_STATE_DONE
durumundan kısa bir süre sonra bu callback
, ana iş parçacığında çağrılacak.
void vps_availability_callback(void* context, ArVpsAvailability availability) { // Callback is called on the Main thread. // Handle the ArVpsAvailability result as shown above. // For example, show UI that enables your AR view. // It is a best practice to free `context` memory at the end of the callback. free(context); } void check_availability_with_callback(ArSession* ar_session, double latitude, double longitude) { ArVpsAvailabilityFuture* future = NULL; void* context = NULL; CHECK(ArSession_checkVpsAvailabilityAsync( ar_session, latitude, longitude, context, vps_availability_callback, &future) == AR_SUCCESS); }
ArFuture
aboneliğini iptal et
ArFuture
aboneliğini iptal etmeyi denemek için ArFuture_cancel()
numarasını kullanın. İleti dizisi benzerliği nedeniyle, iptal girişiminizin gerçekten başarılı olmaması mümkündür.
ArFuture_cancel()
, bu deneme başarılıysa 1
değerini, aksi takdirde 0
değerini döndürür.
Geospatial API'yi VPS kapsamı olmadan kullanma
Geospatial API, VPS kapsamında olmayan bölgelerde de kullanılabilir. Yukarıdan engellerin çok az olduğu veya hiç olmadığı açık ortamlarda GPS, yüksek doğrulukta poz oluşturmak için yeterli olabilir.
Sırada ne var?
- Kullanıcı cihazının gerçek dünyadaki kesin konumunu belirlemek için cihaz kamerasının coğrafi pozisyonunu alın.