Geospatial API, yüksek doğrulukta Coğrafi duruşlar oluşturmak için VPS ve GPS verilerinin bir kombinasyonunu kullanır. API, cihazın konumunu belirleyebildiği her yerde kullanılabilir:
- İç mekanlar ve yoğun kentsel ortamlar gibi GPS doğruluğu düşük olan alanlarda API, yüksek doğruluklu pozlar oluşturmak için VPS kapsama alanını kullanır.
- Baş üstü engellerin az olduğu veya hiç olmadığı dış mekan ortamlarında, Geospatial API yüksek doğrulukla Coğrafi duruşlar oluşturmak için mevcut GPS konum verilerini kullanabilir.
AR oturumu başlamadan önce belirli bir yatay konumdaki VPS'nin kullanılabilirliğini belirleyebilir ve daha spesifik deneyimler oluşturmak (ör. "AR'ye girmek") için kullanabilirsiniz. düğmesi yalnızca VPS mevcut olduğunda.
ARCore API'yi etkinleştirme
VPS'nin kullanılabilirliğini kontrol etmek için uygulamanızda ARCore API'nin etkinleştirilmesi gerekir.
ARCore API etkinleştirildikten sonra VPS'lerin kullanılabilirliğini aşağıdakiler olmadan kontrol edebilirsiniz:
- Şu anda çalışan bir
ArSession
(ArSession_resume()
çağrılmadan önce). ArGeospatialMode
ayarlanıyor.
Uygulamanızdaki VPS'lerin kullanılabilirliğini kontrol edin
Geospatial API, cihazın konumunu belirleyebildiği her yerde kullanılabilir. Artırılmış gerçeklik (AR) deneyiminiz VPS kapsamına bağlıysa VPS'nin belirli bir yatay konumdaki kullanılabilirliğini kontrol eden eşzamansız bir görev olan ArVpsAvailabilityFuture
için ArSession_checkVpsAvailabilityAsync()
'ı kullanabilirsiniz.
ArVpsAvailabilityFuture
edinildikten sonra anket veya geri arama yoluyla sonucu alabilirsiniz.
Sonuç anketi
ArFuture
durumunu almak için ArFuture_getState()
işlevini kullanın. Üç farklı eyalet vardır:
AR_FUTURE_STATE_PENDING
: İşlem henüz tamamlanmadığı için bilinmiyor.AR_FUTURE_STATE_CANCELLED
: İşlemArFuture_cancel()
tarafından iptal edildi. Kayıtlı geri aramalar hiçbir zaman çağrılmaz.AR_FUTURE_STATE_DONE
: İşlem tamamlanmıştır. Sonucu almak içinArVpsAvailabilityFuture_getResult()
işlevini kullanın.
Görev tamamlanana kadar ArFuture_getState()
aracını 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 çağırma ile sonucu alma
ArFuture
sonucunu öğrenmek için geri arama özelliğini de kullanabilirsiniz. ArSession_checkVpsAvailabilityAsync()
kullanın ve bir callback
sağlayın. Bu callback
, ArFuture
AR_FUTURE_STATE_DONE
durumuna sahip olduktan kısa bir süre sonra Ana iş parçacığında çağrılır.
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()
öğesini kullanın. İş parçacığındaki paralellik nedeniyle, iptal denemeniz gerçekten başarılı olmayabilir.
ArFuture_cancel()
, bu deneme başarılı olduysa 1
, aksi takdirde 0
değerini döndürür.
Geospatial API'yi VPS kapsamı olmadan kullanma
Geospatial API, VPS kapsama alanı olmayan bölgelerde de kullanılabilir. Baş üstü engellerin az olduğu veya hiç olmadığı açık hava ortamlarında GPS, yüksek doğrulukta bir poz oluşturmak için yeterli olabilir.
Sırada ne var?
- Kullanıcının cihazının gerçek dünyadaki tam konumunu belirlemek için cihaz kamerasının coğrafi duruşunu alın.