استخدام علامات الارتساء الجغرافي المكاني لاختيار موضع المحتوى في الواقع على iOS

تُعد المراسي الجيوفضائية نوعًا من الإعلانات الثابتة التي تتيح لك وضع محتوى ثلاثي الأبعاد على أرض الواقع.

أنواع المراسي الجيوفضائية

هناك ثلاثة أنواع من المراسي الجيوفضائية التي يتعامل كل منها مع الارتفاع بشكل مختلف:

  1. علامات ارتساء WGS84:
    تتيح لك علامات الارتساء WGS84 وضع محتوى ثلاثي الأبعاد بأي خط عرض وخط طول وارتفاع محدّدين.

  2. علامات ارتساء التضاريس:
    تتيح لك "علامات ارتساء التضاريس" وضع المحتوى باستخدام خطوط الطول والعرض فقط مع ارتفاع نسبة إلى التضاريس في هذا الموضع. يتم تحديد الارتفاع بالنسبة إلى الأرض أو الطابق كما هو معروف بواسطة VPS.

  3. المراسي الثابتة على السطح:
    تتيح لك الإعلانات الثابتة على السطح وضع المحتوى باستخدام خطوط العرض والطول فقط مع ارتفاعه مقارنةً بسقف المبنى في هذا الموضع. يتم تحديد الارتفاع بالنسبة إلى الجزء العلوي من المبنى كما هو معروف من خلال هندسة التجوّل الافتراضي. وسيتم ضبط هذا افتراضيًا على ارتفاع التضاريس عند عدم وضعه في مبنى.

WGS84 التضاريس سطح
موضع أفقي خط العرض، خط الطول خط العرض، خط الطول خط العرض، خط الطول
موضع رأسي نسبةً إلى ارتفاع WGS84 نسبةً إلى مستوى التضاريس الذي تحدّده "خرائط Google" نسبةً إلى مستوى السطح الذي تحدّده "خرائط Google"
هل يحتاج الخادم إلى أن يتم حله؟ لا نعم نعم

المتطلبات الأساسية

تأكد من تفعيل واجهة برمجة التطبيقات الجغرافية المكانية قبل المتابعة.

وضع المراسي الجيوفضائية

ويحتوي كل نوع من أنواع الإرساء على واجهات برمجة تطبيقات مخصّصة لإنشائها. يُرجى الاطّلاع على أنواع علامات الارتساء الجيوفضائية لمزيد من المعلومات.

إنشاء إعلان ثابت من اختبار النتائج

ويمكنك أيضًا إنشاء علامة ارتساء جيوفضائية من نتيجة اختبار نتيجة. استخدم التحويل من اختبار النتيجة وحوِّله إلى GARGeospatialTransform. ويمكنك استخدامها لوضع أي نوع من أنواع الارتساء الثلاثة الموضّحة.

الحصول على تحويل جغرافي مكاني من خلال تحويل الواقع المعزّز

توفّر GARSession.geospatialTransformFromTransform:error: طريقة إضافية لتحديد خط العرض وخط الطول عن طريق تحويل "تحويل الواقع المعزّز" إلى "تحويل جيوفضائي".

الحصول على تحويل الواقع المعزّز من خلال تحويل جيوفضائي

تعمل GARSession.transformFromGeospatialCoordinate:altitude:eastUpSouthQTarget:error: على تحويل الموضع الأفقي والارتفاع والدوران الرباعي المحددَين لكوكب الأرض في ما يتعلق بإطار إحداثي من الشرق إلى الجنوب إلى تحويل الواقع المعزّز بالنسبة إلى إحداثيات GL العالمية.

اختيار الطريقة التي تناسب حالة الاستخدام

كل طريقة لإنشاء مراسي لها نقاط مفاضلة مرتبطة يجب وضعها في الاعتبار:

  • عند استخدام Streetscape Geometry، استخدم اختبار النتيجة لإرفاق المحتوى بالمبنى.
  • أفضل مراسي تضاريس أو سطح سقف على مراسي WGS84 لأنها تستخدم قيم الارتفاع التي تحددها "خرائط Google".

تحديد خط العرض وخط الطول لموقع جغرافي

هناك ثلاث طرق يمكنك من خلالها حساب خط العرض وخط الطول للموقع:

  • يمكنك استخدام أداة إنشاء الخرائط الجيوفضائية لعرض العالم وتعزيزه من خلال محتوى ثلاثي الأبعاد بدون الحاجة إلى الانتقال فعليًا إلى موقع جغرافي. ويتيح لك ذلك عرض محتوى ثلاثي الأبعاد بشكل مرئي باستخدام "خرائط Google" في Unity Editor. سيتم حساب خط العرض وخط الطول والتدوير والارتفاع للمحتوى تلقائيًا.
  • استخدام "خرائط Google"
  • استخدام Google Earth لاحظ أن الحصول على هذه الإحداثيات باستخدام Google Earth، على عكس خرائط Google، سيعطيك هامش خطأ يصل إلى عدة أمتار.
  • الانتقال إلى الموقع الجغرافي

استخدام "خرائط Google"

للحصول على خط العرض وخط الطول لموقع باستخدام "خرائط Google"، يمكنك إجراء ما يلي:

  1. انتقل إلى خرائط Google على كمبيوتر مكتبي.

  2. انتقِل إلى الطبقات > المزيد.

  3. يمكنك تغيير نوع الخريطة إلى القمر الصناعي ومحو مربع الاختيار عرض الكرة الأرضية في أسفل يمين الشاشة.

    سيؤدي ذلك إلى فرض منظور ثنائي الأبعاد وإزالة الأخطاء المحتملة التي قد تأتي من عرض ثلاثي الأبعاد بزاوية.

  4. على الخريطة، انقر بزر الماوس الأيمن على الموقع الجغرافي واختَر خط الطول/خط العرض لنسخه إلى الحافظة.

استخدام Google Earth

يمكنك حساب خط العرض وخط الطول لموقع ما من Google Earth بالنقر على موقع في واجهة المستخدم وقراءة البيانات من تفاصيل العلامة الموضعية.

للحصول على خط العرض وخط الطول لموقع باستخدام Google Earth:

  1. انتقِل إلى Google Earth على جهاز كمبيوتر سطح المكتب.

  2. انتقِل إلى قائمة الهامبرغر واختَر نمط الخريطة.

  3. أوقِف مفتاح التبديل المباني الثلاثية الأبعاد.

  4. بعد إيقاف مفتاح المباني ثلاثية الأبعاد، انقر على رمز الدبوس لإضافة علامة موضعية في الموقع الجغرافي المحدد.

  5. حدّد مشروعًا يحتوي على علامتك الموضعية، ثمّ انقر على حفظ.

  6. في حقل العنوان للعلامة الموضعية، أدخِل اسمًا للعلامة الموضعية.

  7. انقر على سهم الرجوع في جزء المشروع واختر قائمة إجراءات أخرى.

  8. اختر تصدير كملف KML من القائمة.

يسجّل ملف KLM خط العرض وخط الطول والارتفاع لعلامة موضعية في العلامة <coordinates> مفصولة بفواصل، على النحو التالي:

<coordinates>-122.0755182435043,37.41347299422944,7.420342565583832</coordinates>

لا تستخدِم خط العرض وخط الطول من العلامات <LookAt> التي تحدِّد موضع الكاميرا وليس موقعها الجغرافي.

الانتقال إلى الموقع الجغرافي

ويمكنك حساب ارتفاع الموقع عن طريق الذهاب إلى هناك فعليًا وإجراء ملاحظة محلية.

الحصول على دوران دوران التناوب

تستخلص GARGeospatialTransform.eastUpSouthQTarget الاتجاه من "التحويل الجيوفضائي" وتخرج وحدة رباعية تمثل مصفوفة دوران تحوِّل متجهًا من الهدف إلى نظام الإحداثيات من الشرق إلى الجنوب (EUS). تشير X+ إلى الشرق، بينما Y+ تشير إلى أعلى، وZ+ نقطة جنوبًا. تتم كتابة القيم بالترتيب {x, y, z, w}.

روابط WGS84

نقطة الارتساء WGS84 هي نوع من الإرساء الذي يسمح لك بوضع محتوى ثلاثي الأبعاد في أي خط عرض وخط طول وارتفاع محدد. فهو يعتمد على تحويل واتجاه ليتم وضعه في العالم الحقيقي. يتكون الموضع من خط عرض وخط طول وارتفاع محددين في نظام الإحداثيات WGS84. يتكون الاتجاه من تدوير رباعي.

يتم تسجيل الارتفاع بالأمتار فوق المقطع الناقص من المرجع WGS84 بحيث لا يكون مستوى سطح الأرض لا عند الصفر. تطبيقك مسؤول عن توفير هذه الإحداثيات لكل علامة ارتساء تم إنشاؤها.

وضع ارتساء WGS84 في العالم الحقيقي

تحديد ارتفاع موقع جغرافي

في ما يلي بعض الطرق لتحديد ارتفاع موقع ما لوضع المراسي:

  • إذا كان موقع الإرساء قريبًا من المستخدم، يمكنك استخدام ارتفاع مشابه لارتفاع جهاز المستخدم.
  • بعد حصولك على خط العرض وخط الطول، يمكنك استخدام Elegation API للحصول على الارتفاع بناءً على مواصفات EGM96. يجب تحويل ارتفاع EGM96 في Maps API إلى WGS84 للمقارنة مع الارتفاع في GARGeospatialTransform. يمكنك الاطّلاع على GeoidEval الذي يحتوي على كل من سطر الأوامر وواجهة HTML. تعرض واجهة برمجة تطبيقات الخرائط معلومات خطوط الطول والعرض وفقًا لمواصفات WGS84 بشكل غير تقليدي.
  • يمكنك الحصول على خط العرض وخط الطول والارتفاع للموقع الجغرافي من Google Earth. سيؤدي ذلك إلى ظهور هامش خطأ يصل إلى عدة أمتار. استخدِم خط العرض وخط الطول والارتفاع من علامات <coordinates>، وليس علامات <LookAt>، في ملف KML.
  • إذا كانت هناك نقطة ارتساء حالية قريبة وإذا لم تكن في منحدر شديد، قد تتمكن من استخدام الارتفاع من GARGeospatialTransform للكاميرا بدون استخدام مصدر آخر، مثل Maps API.

إنشاء إعلان ثابت

بعد تحديد خطوط الطول والعرض والارتفاع والدوران الربعي، استخدِم createAnchorWithCoordinate:altitude:eastUpSouthQAnchor:error: لإرساء المحتوى إلى الإحداثيات الجغرافية التي تحددها.

  NSError *error = nil;
  GARAnchor *anchor = [self.garSession createAnchorWithCoordinate:coordinate
                                                         altitude:altitude
                                               eastUpSouthQAnchor:eastUpSouthQAnchor
                                                            error:&error];

مثبتات التضاريس

علامة ارتساء التضاريس هي نوع من علامات الإرساء تتيح لك وضع كائنات الواقع المعزّز باستخدام خطوط الطول والعرض فقط، والاستفادة من المعلومات الواردة من VPS لمعرفة الارتفاع الدقيق فوق سطح الأرض.

بدلاً من إدخال الارتفاع المطلوب، يمكنك توفير الارتفاع فوق التضاريس. وعندما تكون القيمة صفرًا، ستكون المرساة في مستوى سطح الأرض.

ضبط وضع البحث عن طائرة

إنّ تحديد مستوى الوصول إلى المستوى اختياري وليس مطلوبًا لاستخدام علامات الارتساء. تجدر الإشارة إلى استخدام المستويات الأفقية فقط. ستساعد المستوىات الأفقية في المحاذاة الديناميكية لمرتكزات التضاريس على الأرض.

يمكنك استخدام ARWorldTrackingConfiguration.PlaneDetection لاختيار كيفية رصد تطبيقك للطائرات.

إنشاء علامة ارتساء للتضاريس باستخدام واجهة برمجة التطبيقات الجديدة غير المتزامنة

لإنشاء علامة ارتساء للتضاريس ووضعها، اتصل بالرقم GARSession.createAnchorWithCoordinate:altitudeAboveTerrain:eastUpSouthQAnchor:completionHandler:error:.

لن تكون علامة الارتساء جاهزة على الفور ويجب حلّها. وبعد حلّ المشكلة، ستكون متاحة في GARCreateAnchorOnTerrainFuture.

GARCreateAnchorOnTerrainFuture *future = [self.garSession createAnchorWithCoordinate:coordinate
                                                                altitudeAboveTerrain:altitude
                                                                  eastUpSouthQAnchor:eastUpSouthQTarget
                                                                   completionHandler:^(GARAnchor *anchor, GARTerrainAnchorState state) {
                                                                     // handle completion
                                                                   }
                                                                               error:&error];

الاطّلاع على وضع المستقبل

سيكون للمستقبل GARFutureState مرتبط به.

الحالة الوصف
GARFutureStatePending لا تزال العملية في انتظار المراجعة.
GARFutureStateDone اكتملت العملية والنتيجة متاحة.
GARFutureStateCancelled تم إلغاء العملية.

التحقق من حالة ارتساء التضاريس للنتيجة المستقبلية

تنتمي السمة GARTerrainAnchorState إلى العملية غير المتزامنة، كما أنّها جزء من النتيجة المستقبلية النهائية.

switch (future.resultTerrainAnchorState) {
  case GARTerrainAnchorStateSuccess:
    // Terrain anchor finished resolving.
    break;
  case GARTerrainAnchorStateErrorUnsupportedLocation:
    // The requested anchor is in a location that isn't supported by the Geospatial API.
    break;
  case GARTerrainAnchorStateErrorNotAuthorized:
    // An error occurred while authorizing your app with the ARCore API. See
    // https://developers.google.com/ar/reference/ios/group/GARTerrainAnchorState#garterrainanchorstateerrornotauthorized
    // for troubleshooting steps.
    break;
  case GARTerrainAnchorStateErrorInternal:
    // The Terrain anchor could not be resolved due to an internal error.
    break;
  default:
    break;
}

مثبّتات تثبيت الأسطح

بطل مثبّتات الأسطح

مراسي الأسطح هي نوع من المراسي وهي تشبه إلى حدٍ بعيد مراسي التضاريس أعلاه. والفرق هو أنك ستقدم الارتفاع فوق السطح بدلاً من الارتفاع فوق التضاريس.

إنشاء إعلان ثابت على السطح باستخدام واجهة برمجة التطبيقات الجديدة غير المتزامنة

لن تكون علامة الارتساء جاهزة على الفور ويجب حلّها.

لإنشاء علامة ارتساء على السطح ووضعها، اتصل بـ GARSession.createAnchorWithCoordinate:altitudeAboveRooftop:eastUpSouthQAnchor:completionHandler:error:. على غرار "إرساء التضاريس"، ستصل أيضًا إلى GARFutureState في المستقبل. ثم يمكنك الاطلاع على النتيجة المستقبلية للوصول إلى GARRooftopAnchorState.

GARCreateAnchorOnRooftopFuture *future = [self.garSession createAnchorWithCoordinate:coordinate
                                                                altitudeAboveRooftop:altitude
                                                                  eastUpSouthQAnchor:eastUpSouthQTarget
                                                                   completionHandler:^(GARAnchor *anchor, GARRooftopAnchorState state) {
                                                                     // handle completion
                                                                   }
                                                                               error:&error];

الاطّلاع على وضع المستقبل

سيكون للمستقبل GARFutureState مرتبطة به. يمكنك الاطّلاع على الجدول أعلاه.

التحقّق من حالة ارتساء "السطح" لنتيجة المستقبل

تنتمي السمة GARRooftopAnchorState إلى العملية غير المتزامنة، كما أنّها جزء من النتيجة المستقبلية النهائية.

switch (future.resultRooftopAnchorState) {
  case GARRooftopAnchorStateSuccess:
    // Rooftop anchor finished resolving.
    break;
  case GARRooftopAnchorStateErrorUnsupportedLocation:
    // The requested anchor is in a location that isn't supported by the Geospatial API.
    break;
  case GARRooftopAnchorStateErrorNotAuthorized:
    // An error occurred while authorizing your app with the ARCore API. See
    // https://developers.google.com/ar/reference/ios/group/GARRooftopAnchorState#garrooftopanchorstateerrornotauthorized
    // for troubleshooting steps.
    break;
  case GARRooftopAnchorStateErrorInternal:
    // The Rooftop anchor could not be resolved due to an internal error.
    break;
  default:
    break;
}

الخطوات التالية