نقاط الربط الجغرافية هي نوع من نقاط الربط التي تتيح لك وضع محتوى ثلاثي الأبعاد في العالم الواقعي.
أنواع ارتساء الأماكن الجيوفضائية
هناك ثلاثة أنواع من نقاط الربط الجغرافية، يتعامل كلّ نوع منها مع الارتفاع بشكلٍ مختلف:
نقاط تثبيت WGS84:
تتيح لك نقاط تثبيت WGS84 وضع محتوى ثلاثي الأبعاد في أي خط عرض أو خط طول أو ارتفاع معيّن.علامات ارتساء التضاريس:
تتيح لك علامات ارتساء التضاريس وضع المحتوى باستخدام خطوط الطول والعرض فقط مع ارتفاع مرتبط بالتضاريس في ذلك الموضع. يتم تحديد الارتفاع بالنسبة إلى الأرض أو الطابق كما هو معروف من قِبل VPS.مثبتات على السطح:
تتيح لك "مثبتات على السطح" وضع المحتوى باستخدام خطوط الطول والعرض فقط مع ارتفاع مرتبط بسطح المبنى في هذا الموضع. يتم تحديد الارتفاع بالنسبة إلى أعلى المبنى كما هو معروف بواسطة هندسة المشهد في الشارع. سيتم ضبط هذا الخيار تلقائيًا على ارتفاع التضاريس في حال عدم وضعه على مبنى.
WGS84 | التضاريس | على السطح | |
---|---|---|---|
موضع أفقي | خط العرض وخط الطول | خط العرض وخط الطول | خط العرض وخط الطول |
موضع رأسي | نسبةً إلى ارتفاع WGS84 | نسبةً إلى مستوى التضاريس الذي تحدّده "خرائط Google" | بالنسبة إلى مستوى سطح السطح الذي تحدّده "خرائط Google" |
هل يجب حلّ المشاكل في الخادم؟ | لا | نعم | نعم |
المتطلبات الأساسية
تأكَّد من تفعيل واجهة برمجة التطبيقات Geospatial API قبل المتابعة.
وضع عناصر مرجعية جغرافية
يحتوي كل نوع من أنواع نقاط الربط على واجهات برمجة تطبيقات مخصّصة لإنشائها. اطّلِع على أنواع نقاط الربط الجغرافية للحصول على مزيد من المعلومات.
إنشاء عنصر ربط من اختبار الارتطام
يمكنك أيضًا إنشاء عنصر تثبيت جغرافي من نتيجة اختبار الارتطام.
استخدِم عنصر التحويل من اختبار الارتطام وحوِّله إلى GARGeospatialTransform
. استخدِمه لوضع أيٍّ من أنواع الارتساء الثلاثة الموضّحة.
الحصول على تحويل جغرافي من تحويل الواقع المعزّز
توفّر GARSession.geospatialTransformFromTransform:error:
طريقة إضافية لتحديد خط العرض وخط الطول من خلال تحويل عملية تحويل الواقع المعزّز إلى عملية تحويل جغرافي.
تحوّل في الواقع المعزَّز من تحوّل جغرافي مكاني
تحوِّل دالة GARSession.transformFromGeospatialCoordinate:altitude:eastUpSouthQTarget:error:
الموضع الأفقي والارتفاع ودرجة دوران الرباعي وفقًا لنظام إحداثيات الشرق والشمال والجنوب إلى عملية تحويل الواقع المعزّز وفقًا لنظام إحداثيات GL العالمي.
اختيار الطريقة التي تناسب حالة الاستخدام
لكل طريقة من طرق إنشاء عنصر الربط توفُّر مفاضلات مرتبطة يجب أخذها في الاعتبار:
- عند استخدام هندسة المشهد في الشوارع، استخدِم اختبار التصادم لإرفاق المحتوى بمبنى.
- استخدِم نقاط تثبيت التضاريس أو أسطح المنازل بدلاً من نقاط تثبيت WGS84 لأنّها تستخدِم قيم الارتفاع التي تحدّدها "خرائط Google".
تحديد خط العرض وخط الطول لموقع جغرافي
هناك ثلاث طرق يمكنك من خلالها حساب خط العرض وخط الطول لموقع ما:
- استخدِم أداة الإنشاء الجغرافي للاطّلاع على العالم وتعزيزه باستخدام محتوى ثلاثي الأبعاد بدون الحاجة إلى الانتقال إلى موقع جغرافي. يتيح لك ذلك وضع محتوى ثلاثي الأبعاد غامر باستخدام "خرائط Google" في محرِّر Unity. سيتم تلقائيًا احتساب خط العرض وخط الطول ودرجة الدوران والارتفاع للمحتوى.
- استخدام خرائط Google
- استخدِم Google Earth. يُرجى العِلم أنّ الحصول على هذه الإحداثيات باستخدام Google Earth، بدلاً من "خرائط Google"، سيؤدي إلى هامش خطأ يصل إلى عدة أمتار.
- الانتقال إلى الموقع الجغرافي
استخدام خرائط Google
للحصول على خط العرض وخط الطول لموقع جغرافي باستخدام "خرائط Google":
انتقل إلى خرائط Google على جهاز الكمبيوتر المكتبي.
انتقِل إلى الطبقات > المزيد.
غيِّر نوع الخريطة إلى قمر صناعي وأزِل العلامة من مربّع الاختيار عرض الكرة الأرضية في أسفل يمين الشاشة.
سيؤدي ذلك إلى فرض المنظور الثنائي الأبعاد وإزالة الأخطاء المحتملة التي يمكن أن تنتج عن العرض الثلاثي الأبعاد بزاوية.
على الخريطة، انقر بزر الماوس الأيمن على الموقع الجغرافي واختَر خط الطول/خط العرض لنسخهما إلى الحافظة.
استخدام Google Earth
يمكنك احتساب خط العرض وخط الطول لموقع جغرافي من Google Earth من خلال النقر على موقع جغرافي في واجهة المستخدم وقراءة البيانات من تفاصيل العلامة المكانية.
للحصول على خط العرض وخط الطول لموقع جغرافي باستخدام Google Earth:
انتقِل إلى Google Earth على كمبيوتر سطح المكتب.
انتقِل إلى قائمة الهامبرغر واختَر نمط الخريطة.
أوقِف مفتاح التبديل المباني الثلاثية الأبعاد.
بعد إيقاف مفتاح المباني ثلاثية الأبعاد، انقر على رمز الدبوس لإضافة علامة موضعية في الموقع المحدد.
حدِّد مشروعًا يحتوي على علامتك الموضعية وانقر على حفظ.
في حقل العنوان للعلامة الموضعية، أدخِل اسمًا للعلامة الموضعية.
انقر على رمز السهم المتّجه للخلف في لوحة المشروع واختَر القائمة إجراءات أخرى.
اختَر التصدير كملف 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 في العالم الحقيقي
تحديد ارتفاع موقع جغرافي
هناك بضع طرق لتحديد ارتفاع موقع جغرافي لوضع نقاط تثبيت:
- إذا كان موقع النقطة الأساسية قريبًا من المستخدم، يمكنك استخدام ارتفاع مشابه لارتفاع جهاز المستخدم.
- بعد الحصول على خطوط الطول والعرض، استخدِم Elevation API للحصول على ارتفاع استنادًا إلى مواصفات EGM96. يجب تحويل ارتفاع EGM96 في Maps API إلى WGS84 للمقارنة مع ارتفاع
GARGeospatialTransform
. اطّلِع على GeoidEval الذي يتضمّن سطر أوامر وواجهة HTML. تُبلغ Maps API عن خطوط العرض والطول وفقًا لمواصفات 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
لاختيار الطريقة التي يرصد بها تطبيقك الطائرات.
إنشاء عنصر تثبيت في ميزة "تضاريس Google Earth" باستخدام واجهة برمجة التطبيقات Async API الجديدة
لإنشاء عنصر تثبيت لسطح الأرض ووضعه، اتصل بالرقم 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;
}
مسامير التثبيت على السطح
"نقاط التثبيت على السطح" هي نوع من نقاط التثبيت وتشبه إلى حد كبير نقاط التثبيت على التضاريس المذكورة أعلاه. الفرق هو أنّك ستقدّم الارتفاع فوق سطح المنزل بدلاً من الارتفاع فوق التضاريس.
إنشاء عنصر تثبيت على سطح المبنى باستخدام واجهة Async API الجديدة
لن يكون العنصر النائب جاهزًا على الفور ويجب حلّه.
لإنشاء وتد تثبيت على سطح المنزل ووضعه، اتصل على 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
مرتبط. يُرجى الاطّلاع على الجدول أعلاه.
التحقّق من حالة تثبيت Rooftop ضمن نتيجة Future
ينتمي 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;
}
الخطوات التالية
- احرص على فهم حصة استخدام واجهة برمجة التطبيقات في الخدمات المكانية.