أكثر

السيزيوم ثلاثي الأبعاد - تحديد مقياس الخريطة للكرة الأرضية المعروضة


أنا أعمل مع Cesium 3D في الوقت الحالي وأريد تحديد مقياس الخريطة المكافئ الذي يتم عرض الكرة الأرضية عليه.

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

هدفي النهائي هو تحديد مقياس خريطة ، وتحويله إلى مستوى تكبير Openlayers 2 حتى أتمكن من مزامنة العرضين (تقريبًا)


تحديث مارس 2016: تم إصدار السيزيوم 1.19 بوظيفة جديدة ، Camera.computeViewRectangle ، تقوم بعمل جيد بقدر ما يمكن القيام به في حساب مستطيل العرض ، بالنظر إلى التحذيرات أدناه. أوصي الآن باستخدامه بدلاً من استنشاق مربعات الصور كما هو موضح هنا. احتفظ بالإجابة الأصلية أدناه لأنها توضح مشاكل حساب مستطيل عرض بسيط على عرض ثلاثي الأبعاد للكرة الأرضية.

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

يمكنك أن ترى هذا في العمل ، بيانيا ، باستخدام مفتش السيزيوم.

  1. انقر فوق ملف+التوقيع بجانب+ التضاريسفي الجزء السفلي من مفتش السيزيوم.
  2. بعد ذلك ، ضع علامة اختيار علىإظهار إحداثيات البلاط.
  3. قم بتكبير الكاميرا ومشاهدة البلاط يتغير.

لفهم أعمق ، قم بما ورد أعلاه ثم تابع:

  1. قم بتكبير الكاميرا بالقرب من مدينة أو بقعة على الأرض.
  2. استخدم السحب الأوسط (أو ctrl-left-pull) لإمالة العرض باتجاه الأفق.
  3. ضع علامة اختيار علىتعليق تحديث اللد.
  4. قم بتصويب الكاميرا وعمل نسخة احتياطية قليلاً ، لترى البلاط يطفو في الفضاء. لاحظ أن تلك التي كانت بالقرب من الكاميرا (عندما تم تعليق Level-of-Detail) صغيرة وعالية المستوى ، لكن تلك التي كانت مرئية على مسافة كبيرة ومنخفضة المستوى.

الآن بعد أن رأيت أن العديد من مستويات البلاط المختلفة تساهم في عرض كاميرا واحدة ، سأشارك بعض التعليمات البرمجية غير الرسمية للغاية. يستخدم Cesium Inspector بعض نقاط API الخاصة للتطفل على البلاط الذي يتم تحميله ، وبما أن هذا مفتوح المصدر ، يمكنك التطفل على تلك المربعات أيضًا. استخدام واجهات برمجة التطبيقات الخاصة غير مدعوم ويمكن أن يكسر أي إصدار مستقبلي للسيزيوم. مستعد؟ افتح نسخة من Cesium Sandcastle والصق الكود التالي:

// يوضح هذا الرمز القيم الدنيا / القصوى لأي من المربعات قيد النظر للعرض. // ستتغير القيم بشكل غير متزامن حيث يرسل الخادم مربعات ذات مستوى أعلى. var viewer = new Cesium.Viewer ('cesiumContainer') ؛ فار غرب ، جنوب ، شرق ، شمال ؛ var toolbar = document.getElementById ('شريط الأدوات') ؛ viewer.clock.onTick.addEventListener (function () {west = south = 999؛ east = north = -999؛ // تحذير: الوصول إلى المتغيرات _private غير مدعوم رسميًا و // API يمكن أن تنقطع في أي وقت دون تحذير. var tilesToRender = viewer.scene.globe._surface.tileProvider._tilesToRenderByTextureCount ؛ if (Cesium.defined (tileToRender)) {var numArrays = tileToRender.length ؛ لـ (var j = 0 ؛ j  900) {toolbar.innerHTML = 'الموقع غير معروف.'؛} else {toolbar.innerHTML = 'West:' + Cesium.Math.toDegrees (west) .toFixed (4) + '
"+" جنوب: "+ سيزيوم.رياضيات إلى درجات (جنوب). إلى ثابت (4) +"
"+" شرق: "+ سيزيوم.رياضيات إلى درجات (شرق). إلى ثابت (4) +"
'+' شمال: '+ سيزيوم.رياضيات إلى درجات (شمال). toFixed (4) ؛ }}) ؛

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


شاهد الفيديو: تلخيص الخرائط (شهر اكتوبر 2021).