Geospatial API menggunakan kombinasi VPS dan data GPS untuk menghasilkan pose Geospasial akurasi tinggi. API ini dapat digunakan di mana pun perangkat dapat menentukan lokasinya:
- Di area dengan akurasi GPS rendah, seperti ruang dalam ruangan dan lingkungan perkotaan yang padat, API akan mengandalkan cakupan VPS untuk menghasilkan pose dengan akurasi tinggi.
- Di lingkungan luar ruangan dengan sedikit atau tanpa penghalang di atas, Geospatial API mungkin dapat menggunakan data lokasi GPS yang tersedia untuk menghasilkan pose Geospasial dengan akurasi tinggi.
Anda dapat menentukan ketersediaan VPS di posisi horizontal tertentu sebelum sesi AR dimulai dan menggunakannya untuk menciptakan pengalaman yang lebih spesifik — misalnya, untuk menampilkan "Enter AR" hanya jika VPS tersedia.
Mengaktifkan ARCore API
Aplikasi Anda harus mengaktifkan ARCore API untuk memeriksa ketersediaan VPS.
Setelah ARCore API diaktifkan, Anda dapat memeriksa ketersediaan VPS tanpa:
ArSession
yang sedang berjalan (sebelum memanggilArSession_resume()
).- Menetapkan
ArGeospatialMode
.
Memeriksa ketersediaan VPS di aplikasi Anda
Geospatial API dapat digunakan di mana pun perangkat dapat menentukan lokasinya. Jika pengalaman AR Anda bergantung pada cakupan VPS, Anda dapat menggunakan ArSession_checkVpsAvailabilityAsync()
untuk mendapatkan ArVpsAvailabilityFuture
, tugas asinkron yang memeriksa ketersediaan VPS pada posisi horizontal tertentu.
Setelah memiliki ArVpsAvailabilityFuture
, Anda dapat memperoleh hasilnya dengan polling atau melalui callback.
Mengambil polling hasil
Gunakan ArFuture_getState()
untuk mendapatkan status ArFuture
. Ada tiga status yang berbeda:
AR_FUTURE_STATE_PENDING
: Operasi belum selesai, sehingga tidak ada hasil yang diketahui.AR_FUTURE_STATE_CANCELLED
: Operasi telah dibatalkan olehArFuture_cancel()
. Callback yang terdaftar tidak akan pernah dipanggil.AR_FUTURE_STATE_DONE
: Operasi selesai. GunakanArVpsAvailabilityFuture_getResult()
untuk mendapatkan hasil.
Anda dapat terus memeriksa ArFuture_getState()
hingga tugas selesai.
// 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); }
Mendapatkan hasilnya melalui callback
Anda juga bisa mendapatkan hasil ArFuture
melalui callback. Gunakan ArSession_checkVpsAvailabilityAsync()
dan berikan callback
. callback
ini akan dipanggil di Thread utama segera setelah ArFuture
memiliki status AR_FUTURE_STATE_DONE
.
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); }
Batalkan ArFuture
Gunakan ArFuture_cancel()
untuk mencoba membatalkan ArFuture
. Karena paralelisme thread, ada kemungkinan bahwa upaya pembatalan Anda sebenarnya tidak berhasil.
ArFuture_cancel()
menampilkan 1
jika upaya ini berhasil, dan 0
jika tidak.
Menggunakan Geospatial API tanpa cakupan VPS
Geospatial API juga dapat digunakan di area yang tidak memiliki cakupan VPS. Di lingkungan luar ruangan dengan sedikit atau tanpa penghalang di atas kepala, GPS mungkin cukup untuk membuat pose dengan akurasi tinggi.
Langkah berikutnya
- Dapatkan pose Geospasial kamera perangkat untuk menentukan lokasi persis perangkat pengguna di dunia nyata.