Geospatial API, yüksek doğrulukta coğrafi konumlar oluşturmak için VPS ve GPS verilerinin bir kombinasyonunu kullanır. API, cihazın konumunu belirleyebildiği her yerde kullanılabilir:
- Kapalı alanlar ve yoğun kentsel ortamlar gibi GPS doğruluğunun düşük olduğu yerlerde API, yüksek doğrulukta pozlar oluşturmak için VPS kapsamını kullanır.
- Baş üzerinde çok az veya hiç engel bulunmayan dış mekan ortamlarında Geospatial API, yüksek doğrulukta coğrafi konumlar 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 kullanabilirsiniz (ör. yalnızca VPS kullanılabilirken "AR'ye gir" düğmesi göstermek için).
ARCore API'yi etkinleştirme
Uygulamanız, VPS kullanılabilirliğini kontrol etmek için ARCore API'yi etkinleştirmelidir.
ARCore API etkinleştirildikten sonra VPS'nin kullanılabilirliğini aşağıdakileri yapmadan kontrol edebilirsiniz:
- Şu anda çalışan bir
ArSession
(ArSession_resume()
çağrılmadan önce). ArGeospatialMode
ayarlama
Uygulamanızda VPS'nin kullanılabilirliğini kontrol etme
Coğrafi API, cihazın konumunu belirleyebildiği her yerde kullanılabilir. AR deneyiminiz VPS kapsamına bağlıysa ArSession_checkVpsAvailabilityAsync()
kullanarak ArVpsAvailabilityFuture
elde edebilirsiniz. Bu, belirli bir yatay konumdaki VPS kullanılabilirliğini kontrol eden, eşzamansız bir görevdir.
ArVpsAvailabilityFuture
'i aldıktan sonra, anket yaparak veya geri arama yoluyla sonucunu alabilirsiniz.
Anket sonucu
ArFuture
öğesinin durumunu almak için ArFuture_getState()
kullanın. Üç farklı durum vardır:
AR_FUTURE_STATE_PENDING
: İşlem henüz tamamlanmadığı için sonuç bilinmiyor.AR_FUTURE_STATE_CANCELLED
: İşlemArFuture_cancel()
tarafından iptal edildi. Kayıtlı geri arama numaraları hiçbir zaman aranmaz.AR_FUTURE_STATE_DONE
: İşlem tamamlandı. Sonucu almak içinArVpsAvailabilityFuture_getResult()
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); }
Sonuçları geri arama yoluyla alma
ArFuture
sonucunu geri çağırma işlevi aracılığıyla da alabilirsiniz. ArSession_checkVpsAvailabilityAsync()
kullanın ve bir callback
sağlayın. Bu callback
, ArFuture
AR_FUTURE_STATE_DONE
durumuna geldikten kısa bir süre sonra ana mesaj dizisinde ç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
ArFuture
'ı iptal etmek için ArFuture_cancel()
simgesini kullanın. İptal denemeniz, iş parçacığı paralelliği nedeniyle aslında başarılı olmayabilir.
ArFuture_cancel()
, bu deneme başarılıysa 1
, aksi takdirde 0
değerini döndürür.
Coğrafi API'yi VPS kapsama alanı olmadan kullanma
Coğrafi API, VPS kapsamı olmayan alanlarda da kullanılabilir. Başınızın üzerinde çok az engel bulunan veya hiç engel bulunmayan dış mekan ortamlarında, yüksek doğrulukta bir poz oluşturmak için GPS 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 konumlandırma pozunu alın.