تستخدم واجهة برمجة التطبيقات Geospatial API مزيجًا من بيانات VPS وبيانات نظام تحديد المواقع العالمي (GPS) لإنشاء أوضاع جغرافية مكانية عالية الدقة. ويمكن استخدام واجهة برمجة التطبيقات في أي مكان يتمكّن الجهاز من تحديد موقعه الجغرافي:
- وفي المناطق التي تكون فيها دقة نظام تحديد المواقع العالمي (GPS)، مثل المساحات الداخلية والبيئات الحضرية ذات الكثافة السكانية العالية، ستعتمد على تغطية واجهات برمجة التطبيقات (VPS) لإنشاء أوضاع عالية الدقة.
- في البيئات الخارجية مع وجود عوائق قليلة أو عدم وجود عوائق علوية، قد تتمكن واجهة برمجة التطبيقات Geospatial API من استخدام بيانات الموقع المتاحة لنظام تحديد المواقع العالمي (GPS) لإنشاء أوضاع جيوفضائية بدقة عالية.
يمكنك تحديد مدى توفّر VPS في موضع أفقي معيّن قبل بدء جلسة الواقع المعزّز واستخدامه لإنشاء تجارب أكثر تحديدًا، مثل تقديم "Enter AR". فقط عندما يكون VPS متاحًا.
تفعيل ARCore API
يجب أن يفعّل تطبيقك واجهة برمجة تطبيقات ARCore للتحقّق من مدى توفّر VPS.
بعد تفعيل واجهة برمجة التطبيقات ARCore API، يمكنك التحقّق من توفّر VPS بدون:
ArSession
حالي قيد التشغيل (قبل الاتصالArSession_resume()
).- جارٍ ضبط
ArGeospatialMode
.
التحقّق من مدى توفّر خدمة VPS في تطبيقك
يمكن استخدام واجهة برمجة التطبيقات Geospatial API في أي مكان يمكن للجهاز تحديد موقعه الجغرافي فيه. إذا كانت تجربة الواقع المعزّز تعتمد على تغطية VPS، يمكنك استخدام ArSession_checkVpsAvailabilityAsync()
للحصول على ArVpsAvailabilityFuture
، وهي مهمة غير متزامنة تتحقّق من مدى توفُّر VPS في موضع أفقي معيّن.
بعد الحصول على ArVpsAvailabilityFuture
، يمكنك الحصول على النتيجة من خلال الاستطلاع أو من خلال طلب معاودة الاتصال.
إجراء استطلاع للنتيجة
استخدِم ArFuture_getState()
للحصول على حالة ArFuture
. هناك ثلاث حالات مختلفة:
AR_FUTURE_STATE_PENDING
: لم تكتمل العملية بعد، لذا لا يمكن معرفة أي نتيجة.AR_FUTURE_STATE_CANCELLED
: تم إلغاء العملية من قِبلArFuture_cancel()
. ولن يتمّ استدعاء أيّ مكالمة تلقائية مسجّلة.AR_FUTURE_STATE_DONE
: اكتملت العملية. استخدِمArVpsAvailabilityFuture_getResult()
للحصول على النتيجة.
يمكنك مواصلة التحقّق من ArFuture_getState()
إلى أن تكتمل المهمة.
// 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); }
الحصول على النتيجة من خلال معاودة الاتصال
يمكنك أيضًا الحصول على نتيجة ArFuture
من خلال معاودة الاتصال. استخدِم ArSession_checkVpsAvailabilityAsync()
وأضِف callback
. سيتم استدعاء callback
هذا في سلسلة المحادثات الرئيسية بعد وقت قصير من توفُّر الحالة AR_FUTURE_STATE_DONE
في ArFuture
.
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_cancel()
لمحاولة إلغاء ArFuture
. بسبب توازُن سلاسل المهام، قد لا تنجح محاولة الإلغاء في الواقع.
تعرِض الدالة ArFuture_cancel()
القيمة 1
إذا كانت هذه المحاولة ناجحة، و0
في الحالات الأخرى.
استخدام واجهة برمجة التطبيقات Geospatial API بدون تغطية VPS
يمكن أيضًا استخدام واجهة برمجة التطبيقات Geospatial API في المناطق التي لا تتوفّر فيها تغطية VPS. في البيئات الخارجية التي تتضمّن عددًا قليلاً من العوائق العلوية أو لا تتضمّن أيّ منها، قد يكون نظام تحديد المواقع العالمي (GPS) كافيًا لإنشاء وضع بدقة عالية.
الخطوات التالية
- الحصول على معلومات وضع كاميرا الجهاز المتعلّقة بالموقع الجغرافي لتحديد الموقع الجغرافي الدقيق لجهاز المستخدم في العالم الحقيقي