18.10. حاسبة الطبقات الشبكية. قيم انعدام البيانات¶
ملاحظة
في هذا الدرس سنرى كيفية استخدام حاسبة الطبقات الشبكية لإجراء بعض العمليات على الطبقات الشبكية. وسنشرح أيضًا ما هي قيم انعدام البيانات (no-data) وكيف تتعامل معها الحاسبة والخوارزميات الأخرى
حاسبة الطبقات الشبكية من أقوى الخوارزميات التي ستجدها. إنها خوارزمية مرنة ومتعددة الاستخدامات إلى حد كبير، يمكن استخدامها في حسابات كثيرة ومتنوعة، وستصبح قريبًا جزءًا مهمًا من صندوق أدواتك.
في هذا الدرس سنُجري بعض الحسابات باستخدام حاسبة الطبقات الشبكية، معظمها بسيط إلى حد ما. سيتيح لنا ذلك رؤية كيفية استخدامها وكيف تتعامل مع بعض الحالات الخاصة التي قد تواجهها. فهم ذلك مهم للحصول لاحقًا على النتائج المتوقعة عند استخدام الحاسبة، ولفهم بعض التقنيات التي تُطبَّق بها عادةً.
افتح مشروع QGIS الخاص بهذا الدرس وسترى أنه يحتوي على عدة طبقات شبكية.
افتح الآن صندوق الأدوات وافتح نافذة الحوار الخاصة بحاسبة الطبقات الشبكية.
ملاحظة
الواجهة مختلفة في الإصدارات الحديثة.
تحتوي نافذة الحوار على معاملين.
الطبقات المستخدمة في التحليل. هذا مُدخل متعدد، ما يعني أنه يمكنك اختيار أي عدد تريده من الطبقات. انقر على الزر الموجود على الجانب الأيمن ثم اختر الطبقات التي تريد استخدامها في نافذة الحوار التي ستظهر.
الصيغة المراد تطبيقها. تستخدم الصيغة الطبقات المختارة في المعامل أعلاه، والتي تُسمّى بأحرف الأبجدية (
a, b, c...) أوg1, g2, g3...كأسماء متغيّرات. أي أن الصيغةa + 2 * bهي نفسهاg1 + 2 * g2وستحسب مجموع القيمة في الطبقة الأولى مضافًا إليه ضعف القيمة في الطبقة الثانية. وترتيب الطبقات هو نفسه الترتيب الذي تراه في نافذة حوار الاختيار.
تحذير
الحاسبة حساسة لحالة الأحرف.
في البداية، سنغيّر وحدات نموذج الارتفاع الرقمي من الأمتار إلى الأقدام. الصيغة التي نحتاجها هي التالية:
h' = h * 3.28084
اختر DEM في حقل الطبقات واكتب a * 3.28084 في حقل الصيغة.
تحذير
لغير الناطقين بالإنجليزية: استخدم دائمًا "." لا ",".
انقر على Run لتشغيل الخوارزمية. ستحصل على طبقة لها مظهر الطبقة المُدخلة نفسه، لكن بقيم مختلفة. الطبقة المُدخلة التي استخدمناها تحتوي على قيم صالحة في جميع خلاياها، لذا ليس للمعامل الأخير أي تأثير على الإطلاق.
لنُجرِ الآن حسابًا آخر، هذه المرة على الطبقة accflow. تحتوي هذه الطبقة على قيم الجريان المتراكم، وهو معامل هيدرولوجي. وتحتوي على هذه القيم فقط داخل منطقة مستجمع مياه معيّن، مع قيم انعدام بيانات خارجه. كما ترى، العرض ليس غنيًا بالمعلومات كثيرًا، بسبب طريقة توزّع القيم. سيعطي استخدام لوغاريتم تراكم الجريان هذا تمثيلًا أغنى بالمعلومات بكثير. ويمكننا حساب ذلك باستخدام حاسبة الطبقات الشبكية.
افتح نافذة حوار الخوارزمية مرة أخرى، واختر الطبقة accflow بوصفها طبقة الإدخال الوحيدة، وأدخل الصيغة التالية: log(a).
إليك الطبقة التي ستحصل عليها.
إذا اخترت الأداة Identify لمعرفة قيمة طبقة عند نقطة معيّنة، واخترت الطبقة التي أنشأناها للتو، ونقرت على نقطة خارج الحوض، فسترى أنها تحتوي على قيمة انعدام بيانات.
في التمرين التالي سنستخدم طبقتين بدلًا من واحدة، وسنحصل على نموذج ارتفاع رقمي بقيم ارتفاع صالحة فقط داخل الحوض المعرّف في الطبقة الثانية. افتح نافذة حوار الحاسبة واختر طبقتي المشروع كلتيهما في حقل طبقات الإدخال. أدخل الصيغة التالية في الحقل المقابل:
a/a * b
يشير a إلى طبقة الجريان المتراكم (لأنها أول ما يظهر في القائمة) ويشير b إلى نموذج الارتفاع الرقمي. ما نفعله في الجزء الأول من الصيغة هنا هو قسمة طبقة الجريان المتراكم على نفسها، ما ينتج عنه القيمة 1 داخل الحوض، وقيمة انعدام بيانات خارجه. ثم نضرب في نموذج الارتفاع الرقمي، للحصول على قيمة الارتفاع في الخلايا الواقعة داخل الحوض (DEM * 1 = DEM) وقيمة انعدام البيانات خارجه (DEM * no_data = no_data)
إليك الطبقة الناتجة.
تُستخدم هذه التقنية كثيرًا لإخفاء (mask) القيم في طبقة شبكية، وهي مفيدة كلما أردت إجراء حسابات لمنطقة غير المنطقة المستطيلة الاعتباطية التي تستخدمها الطبقة الشبكية. على سبيل المثال، ليس لمدرّج تكراري للارتفاعات في طبقة شبكية معنى كبير. أما إذا حُسب باستخدام القيم المقابلة لحوض فقط (كما في الحالة أعلاه)، فإن النتيجة التي نحصل عليها تكون ذات معنى وتقدّم فعلًا معلومات عن تكوين الحوض.
هناك أمور أخرى مثيرة للاهتمام في هذه الخوارزمية التي شغّلناها للتو، إلى جانب قيم انعدام البيانات وكيفية التعامل معها. إذا ألقيت نظرة على امتدادات الطبقات التي ضربناها (يمكنك فعل ذلك بالنقر نقرًا مزدوجًا على أسماء الطبقات في جدول المحتويات والاطلاع على الخصائص)، فسترى أنها ليست متطابقة، لأن الامتداد الذي تغطيه طبقة تراكم الجريان أصغر من امتداد نموذج الارتفاع الرقمي الكامل.
هذا يعني أن هاتين الطبقتين غير متطابقتين، ولا يمكن ضربهما مباشرة دون توحيد أحجامهما وامتداداتهما بإعادة تشكيل إحداهما أو كلتيهما. ومع ذلك، لم نفعل أي شيء. يتولّى QGIS هذه الحالة ويعيد تشكيل طبقات الإدخال تلقائيًا عند الحاجة. يكون امتداد المخرج هو أصغر امتداد مغطٍّ يُحسب من طبقات الإدخال، وحجم الخلية هو أصغر أحجام خلاياها.
في هذه الحالة (وفي معظم الحالات)، يُنتج ذلك النتائج المرغوبة، لكن يجب أن تكون دائمًا على دراية بالعمليات الإضافية التي تجري، لأنها قد تؤثر في النتيجة. وفي الحالات التي قد لا يكون فيها هذا السلوك مرغوبًا، يجب إجراء إعادة التشكيل يدويًا مسبقًا. وفي الفصول اللاحقة، سنرى المزيد عن سلوك الخوارزميات عند استخدام طبقات شبكية متعددة.
لننهِ هذا الدرس بتمرين إخفاء آخر. سنحسب الانحدار في جميع المناطق التي يتراوح ارتفاعها بين 1000 و1500 متر.
في هذه الحالة، ليس لدينا طبقة نستخدمها قناعًا، لكن يمكننا إنشاؤها باستخدام الحاسبة.
شغّل الحاسبة باستخدام نموذج الارتفاع الرقمي بوصفه طبقة الإدخال الوحيدة والصيغة التالية
ifelse(abs(a-1250) < 250, 1, 0/0)
كما ترى، يمكننا استخدام الحاسبة ليس فقط لإجراء عمليات جبرية بسيطة، بل أيضًا لإجراء حسابات أكثر تعقيدًا تتضمّن عبارات شرطية، مثل العبارة أعلاه.
للنتيجة القيمة 1 داخل النطاق الذي نريد العمل عليه، وقيمة انعدام البيانات في الخلايا الواقعة خارجه.
تأتي قيمة انعدام البيانات من التعبير 0/0. ولأنها قيمة غير محدّدة، سيضيف SAGA قيمة NaN (ليست رقمًا)، والتي تُعامَل فعليًا قيمةَ انعدام بيانات. وبهذه الحيلة الصغيرة يمكنك تعيين قيمة انعدام بيانات دون الحاجة إلى معرفة قيمة انعدام البيانات الخاصة بالخلية.
عليك الآن فقط ضربها في طبقة الانحدار المرفقة في المشروع، وستحصل على النتيجة المطلوبة.
يمكن إنجاز كل ذلك في عملية واحدة باستخدام الحاسبة. نترك ذلك تمرينًا للقارئ.