درس تطبيقي: حساب النسبة المئوية للغطاء الأرضي لكل مستجمع مائي فرعي

الموقع: OpenCourseWare for GIS
المقرر: تطبيقات في الهيدرولوجيا باستخدام QGIS
كتاب: درس تطبيقي: حساب النسبة المئوية للغطاء الأرضي لكل مستجمع مائي فرعي
طبع بواسطة: Guest user
التاريخ: الجمعة، 26 يونيو 2026، 4:10 PM

1. ‏المقدمة

 
بالنسبة للدراسات المتعلقة بـ هيدرولوجيا المستجمعات المائية (Catchment hydrology)، غالباً ما يكون من المهم معرفة النسبة المئوية لـ الغطاء الأرضي (Land cover) لكل مستجمع مائي فرعي.
 
 
 

1.1. نظرية أدوات تراكب الفكتور

في هذا الدرس سنستخدم بعض أدوات تراكب الفكتور (Vector Overlay Tools).

 شاهد هذا الفيديو لتعلم المفاهيم والإجابة على الأسئلة.

2. إعداد طبقة المستجمع المائي الفرعي

1. ابدأ بتشغيل QGIS Desktop مع فتح مشروع جديد.
 
2. قم بتنزيل ملف catchpolygons.shp (بصيغة shapefile) وأضفه إلى مشروع QGIS فارغ.
 
3. افتح جدول الخصائص لطبقة catchpolygons.
 
تم حساب هذه الطبقة باستخدام نهج ترسيم المستجمعات المائية (Catchment delineation) الموضح في الدرس 4. والنتيجة هي أن كل مستجمع مائي فرعي له قيمة تبلغ 100. ومع ذلك، ولأغراضنا الحالية، يحتاج كل مستجمع فرعي إلى معرّف فريد (Unique ID).
 
4. قم بالتبديل إلى نمط التحرير باستخدام زرToggle editing button Toggle Editing.
 
5. في قسم حاسبة الحقول (Field Calculator) الموجود أسفل شريط الأدوات مباشرةً، صُغ المعادلة التالية: DN = $id وانقر على تحديث الكل. انقر على زر Save layer edits لحفظ التعديلات.

number features

تقوم دالة $id بتعيين معرّف المعلم الفريد (Unique feature ID) لكل معلم (Feature) في جدول الخصائص.
 
نحتاج الآن إلى إضافة خاصية تتضمن مساحة السطح (Surface area) لكل مضلع مستجمع مائي فرعي.
 
6. انقر على الأيقونة المخصصة Open Field Calculator لفتح مربع حوار حاسبة الحقول.
 
7. في مربع حوار حاسبة الحقول، أنشئ حقلاً جديداً بـ اسم حقل المخرجات (Output field name) التالي: CatchArea. حدد نوع حقل المخرجات ليكون عدداً عشرياً (حقيقياً)، مع تعيين طول حقل المخرجات عند 10 و الدقة عند 2.
 
8. ضمن علامة تبويب التعبير (Expression)، اكتب:
$area

انقر على موافق ok لإنشاء الحقل الجديد الذي يحتوي على مساحات المستجمعات المائية الفرعية.

Add a Field with Subcatchment Area


يحتوي جدول الخصائص الآن على المعرفات الفريدة (Unique IDs) و مساحات السطح لكل مستجمع مائي فرعي بـ الأمتار المربعة.

calculate catchmentareas

3. إعداد بيانات الغطاء الأرضي

الآن علينا إعداد بيانات الغطاء الأرضي (Land-cover data)، والتي تتكون من الخطوات التالية التي سيتم توجيهك خلالها في الأقسام القادمة: 
  • تنزيل بيانات CORINE 2018.
  • تنسيق طبقة الغطاء الأرضي.
  • اقتطاع وإعادة إسقاط طبقة الغطاء الأرضي.
  • تجميع (Aggregate) فئات الغطاء الأرضي.
  • دمج (Dissolve) معالم الغطاء الأرضي.

3.1. CORINE 2018 تنزيل بيانات

في الدرس السابق، استخدمنا طبقة WMTS لـ تصور (Visualizing) الغطاء الأرضي. ومع ذلك، فمن أجل إجراء الحسابات (Calculations)، لا يمكننا استخدام الصور المعالجة (Rendered pictures) الناتجة عن خدمات WMTS أو WMS؛ فنحن بحاجة إلى الوصول المباشر إلى البيانات. في هذا الدرس، سنقوم بتنزيل بيانات CORINE 2018 المفتوحة من موقع خدمة كوبيرنيكوس لمراقبة الأراضي (Copernicus Land Monitoring Service).
 
1. افتح المتصفح وانتقل إلى الرابط التالي: https://land.copernicus.eu/pan-european/corine-land-cover..
 
2. انقر فوق CLC 2018.
 
ستظهر لك خريطة عبر الإنترنت تحتوي على معاينة (Preview) لـ الطبقة.
 
3. انقر فوق علامة تبويب تحميل.
 
4. لتنزيل البيانات، ستحتاج إلى حساب ؛ انقر فوق الرابط لـ التسجيل.
 
بمجرد تسجيل الدخول، يمكنك الاختيار من بين صيغ بيانات (Data formats) مختلفة.

corine download

سنستخدم هنا صيغة GeoPackage، لأننا بحاجة إلى بيانات فكتور.
 
5. ضع علامة في المربع الموجود أمام Corine Land Cover - GeoPackage format.
 
6. انقر على زرتحميل .
 
يبلغ حجم الملف 3.5 جيجابايت. إذا كان عرض النطاق الترددي (Bandwidth) لديك منخفضاً، يمكنك أيضاً تنزيل مجموعة فرعية من مجموعة البيانات من مواد الدورة في صفحة الدرس الرئيسية.
 
7. قم بفك ضغط (Unzip) المحتويات في مجلد جديد ستستخدمه لهذا التمرين.
 
8. انتقل إلى مجلد DATA وقم بتوسيع محتويات ملف U2018_CLC2018_V2020_20u1.gpkg.
 
9. اسحب طبقة الـ GeoPackage التي تحمل الاسم U2018_CLC2018_V2020_20u1 إلى لوحة الخريطة.
 
10. في النافذة المنبثقة لـ تحديد التحويل Select Transformation، انقر فوق موافق لاستخدام معادلة التحويل (Transformation) الافتراضية.
 
11. اجعل المضلعات (Polygons) الخاصة بطبقة catchpolygons شفافة بإطار أسود وعرض خط (Stroke width) يبلغ 0.66 ملم، وتأكد من أنها تقع فوق طبقة الغطاء الأرضي.
 
بعد ذلك، سنقوم بـ تنسيق  طبقة الغطاء الأرضي.

3.2. CORINE 2018 تنسيق خريطة الغطاء الأرضي

الآن سنقوم بـ تنسيق خريطة الغطاء الأرضي (Land Cover) لـ CORINE 2018. ستجد في مجموعة البيانات التي تم تنزيلها مجلداً باسم Legend. يحتوي المجلد على ملفات مفاتيح الخريطة بصيغ مختلفة. سنستخدم هنا ملف clc_legend.qml، وهو ملف تنسيق طبقات QGIS.
 
1. انقر بزر الفارة الأيمن فوق طبقة الغطاء الأرضي واختر خصائص (Properties)، ثم انتقل إلى علامة تبويب رموز الخريطة (Symbology).
 
2. في أسفل مربع الحوار، انتقل إلى تنسيق | تحميل التنسيق (Style | Load Style).

load style

3. أنت الآن في مربع حوار "مدير تنسيقات قاعدة البيانات" (Database styles manager). تصفح للوصول إلى ملف legend\clc_legend.qml وانقر فوق تحميل التنسيق (Load style).

Database Styles Manager

تم الآن تطبيق مفتاح الخريطة على الحقل Code_18 لطبقة الـ GeoPackage، والتي تحتوي على فئات الغطاء الأرضي (Land cover) لـ CORINE من المستوى 3.

corine layer style

4. انقر فوق موافق للموافقة والعودة إلى لوحة الخريطة.
 
شاهد هذا الفيديو للتحقق من خطوات تنزيل و تنسيق خريطة الغطاء الأرضي (Land-cover) لـ CORINE:

3.3. اقتطاع وإعادة إسقاط خريطة الغطاء الأرضي

لا تزال طبقة الغطاء الأرضي كبيرة جدًا (حتى لو قمت بتنزيل المجموعة الفرعية المقدمة)، لذا سنقوم بإعداد مجموعة فرعية تغطي فقط المستجمعات المائية الفرعية. بالإضافة إلى ذلك، سنقوم أيضًا بـ إعادة إسقاط  طبقة الغطاء الأرضي (EPSG: 3035) لتصبح بنفس نظام إسقاط  طبقة catchpolygons (EPSG:32632). يمكن القيام بالأمرين معًا باستخدام أداة واحدة.
 
1. انقر بزر الفارة الأيمن فوق طبقة U2018_CLC2018_V2020_20u1 واختر تصدير | حفظ المعالم باسم  Export | Save Features As...
 
2. اختر GeoPackage كصيغة (Format)، وتصفح للوصول إلى ملف الـ GeoPackage الخاص ببيانات Corine. اكتب في خانة اسم الطبقة الاسم التالي: Corine2018_repr، وبالنسبة لـ CRS (نظام الإحداثيات المرجعي)، اختر نظام المشروع (EPSG:32632).
 
3. قم بتفعيل المربع الموجود أمام النطاق، ثم انقر فوق حساب من الطبقة (Calculate from Layer) واختر catchpolygons. انقر فوق OK.

result export corine

4. انسخ التنسيق من طبقة U2018_CLC2018_V2020_20u1 إلى طبقة Corine2018_repr، ثم أزِل طبقة U2018_CLC2018_V2020_20u1.
 
يجب أن تكون النتيجة كالتالي: 

result export corine

: شاهد هذا الفيديو للتحقق من الخطوات الواردة في هذا القسم

3.4. تجميع فئات الغطاء الأرضي

تمتلك CORINE مستويات مختلفة من فئات الغطاء الأرضي. وتعد بيانات CORINE المتوفرة لدينا هي ما يسمى ببيانات المستوى 3. في جدول الخصائص، يحتوي الحقل code_18 على قيم للمستوى 3، وهي ممثلة بـ 3 أرقام. سنقوم في هذا القسم بـ تجميع (Aggregate) تصنيفات المستوى3 التفصيلية لتصبح في المستوى 1. لذلك، نحتاج إلى إنشاء حقل (Field) جديد يحتوي فقط على الرقم الأول لكل معلم.
 
1. افتح جدول الخصائص لطبقة Corine2018_repr وقم بالتبديل إلى وضع التحرير (Editing mode).
 
2. انقر فوق الأيقونة لفتح مربع حوار حاسبة الحقول.
 
3. أنشئ حقلاً بـ اسم Level1، واجعل نوع حقل المخرجات (Output field type) هو عدد صحيح (Whole number/integer).
 
سنقوم بكتابة تعبير يعيد ترميز جميع فئات المستوى 3 لتصبح فئات من المستوى 1.
 
4. اكتب التعبير كما هو موضح في الشكل أدناه.
 
تقوم الدالة left بإرجاع سلسلة نصية تتضمن عددًا (n) من الأحرف الموجودة في أقصى اليسار. نحتاج هنا إلى الحرف الأول فقط، لذا نختار القيمة 1 لـ الطول. ونستخدم الدالة to_int لتحويل السلسلة النصية إلى عدد صحيح .



5. انقر فوق OK لـ إنشاء الحقل Level1.
 
يجب أن يظهر جدول الخصائص الآن كما يلي:


6. قم بـ تعطيل وضع التحرير (Toggle off editing mode) و احفظ التعديلات .

3.5. دمج معالم الغطاء الأرضي

الآن يوجد العديد من المضلعات المتجاورة التي تحمل نفس فئة المستوى 1. يجب دمج هذه المضلعات لتصبح معلماً  واحداً. يتم ذلك من خلال عملية الدمج (Dissolve).
 
1. من القائمة الرئيسية ، انتقل إلى Vector | Geoprocessing tools | Dissolve.
 
2. في مربع حواردمج (Dissolve)، اختر corine2018_repr كـ طبقة إدخال (Input layer)، وحدد حقل level1 كـ حقل الدمج (Dissolve field). احفظ الملف في الـ GeoPackage باسم corine2018_dissolved، ثم انقر فوق تشغيل (Run).
 

Dissolve CORINE Level 1 Features

3. انقر فوق إغلاق (Close) للعودة إلى لوحة الخريطة عند اكتمال عملية الحساب (Calculation).
 
4. افتح جدول الخصائص لطبقة corine2018_dissolved للتحقق من النتيجة . يجب أن تظهر الآن 5 معالم  فقط تحمل فئات المستوى 1 من 1 إلى 5. لاحظ أنه يمكنك النقر فوق اسم الحقل (Field name) لـ فرز (Sort) المعالم .
 



5. قُم بإزالة corine2018_repr من لوحة الطبقات وقُم بـ تنسيق طبقة corine2018_dissolved باستخدام ألوان تعتمد على مفتاح خريطة CORINE الأصلي من المستوى 3. لاحظ أن مفتاح خريطة المستوى 1 غير متوفر، لذا ستحتاج إلى اختيار الألوان في لوحة تنسيق الطبقة.

شاهد هذا الفيديو للتحقق من خطوات القسمين 3.4 و 3.5:

4. إجراء تقاطع مكاني بين طبقة الغطاء الأرضي و طبقة المستجمعات المائية الفرعية

الآن وبعد أن قمنا بإعداد طبقات الغطاء الأرضي ومضلعات المستجمعات المائية الفرعية ، فإن الخطوة التالية هي إجراء تقاطع (Intersection) بين الطبقتين لإضافة حدود المستجمعات المائية الفرعية إلى خريطة الغطاء الأرضي.
 
1. من القائمة الرئيسية ، انتقل إلى Vector | Geoprocessing tools | Intersection.

intersection-menu.png

2. اختر طبقة corine2018_dissolved كـ طبقة إدخال (Input layer)، واختر catchpolygons كـ طبقة تراكب (Overlay layer).احفظ النتيجة في ملف الـ GeoPackage باسم الطبقة corine_catch_intersected، ثم انقر فوق تشغيل(Run).

ستظهر لك رسالة الخطأ التالية:

 Invalid Geometry Error

يرتبط هذا بـ أخطاء الهندسة المكانية (Geometry errors) التي قد تحدث أثناء عملية تحديد المستجمعات المائية (Catchment delineation) عند تحويل البيانات الشبكية  إلى مضلعات.
 
3. انقر فوق إغلاق ,لإغلاق مربع الحوار.
 
يمكن تصحيح هذا الخطأ.
 
4. في صندوق أدوات المعالجة (Processing Toolbox)، ابحث عن أداة Fix geometries.

5. في مربع حوار Fix geometries، اختر catchpolygons كـ طبقة إدخال (Input layer)، واحفظ catchpoly_fixed داخل ملف الـ GeoPackage، ثم انقر فوق تشغيل.

Fix Geometries

6. انقر فوق إغلاق بعد اكتمال المعالجة (Processing).
 
7. انسخ التنسيق من طبقة catchpolygons إلى طبقة catchpoly_fixed، ثم أزِل طبقة catchpolygons.
 
8. كرر الخطوتين1 و 2 واحفظ مخرجات التقاطع (Intersection) باسم الطبقة corine_catch_intersected_cor داخل ملف الـ GeoPackage.
 
9. قُم بـ تنسيق طبقة corine_catch_intersected_cor عن طريق نسخ التنسيق من طبقة corine2018_dissolved التي تم تنسيقها سابقاً . تحقق من نتيجة التقاطع.
 
10. أزِل طبقة corine2018_dissolved من لوحة الطبقات.
 
شاهد هذا الفيديو للتحقق من خطوات هذا القسم: 

5. حساب مساحة فئات الغطاء الأرضي لكل مستجمع مائي فرعي

الآن نحتاج إلى حساب مساحة فئات CORINE من المستوى 1 لكل مستجمع مائي فرعي.
 
1. افتح جدول الخصائص لطبقة corine_catch_intersected_cor.
 
في جدول الخصائص، يمكننا العثور على الحقل CatchArea الذي يحتوي على مساحة كل مستجمع مائي فرعي، والحقل DN الذي يحتوي على المعرّف الفريد (Unique ID) لكل مستجمع مائي فرعي، والحقل Level1 الذي يحتوي على فئة CORINE من المستوى 1 لكل معلم.
 
سنقوم بإضافة حقل جديد وحساب مساحة كل معلم، والتي تمثل مساحة كل فئة من المستوى 1 داخل المستجمع المائي الفرعي بطريقة مماثلة لما قمنا به سابقاً لمساحات المستجمعات المائية الفرعية.
 
2. استخدم حاسبة الحقول (Field Calculator) كما فعلنا من قبل لإنشاء حقل جديد باسم ClassArea، واجعل النوع عدد عشري (حقيقي). تحت علامة تبويب التعبير (Expression)، اكتب: 
$area
 وانقر فوق OK.
 
3. الآن عُد إلى حاسبة الحقول وأنشئ حقلاً جديداً للنسبة المئوية لكل فئة من فئات CORINE المستوى 1 في كل مستجمع مائي فرعي. سمِّ الحقل Percentage واجعل النوع عدد عشري (حقيقي). تحت علامة تبويب التعبير، اكتب: 
( "ClassArea" / "CatchArea" ) * 100
 انقر فوق OK لتعيين النسبة المئوية لكل معلم.
 
4. لاستكمال جدول الخصائص، أضف حقلاً لأسماء فئات المستوى 1 كـ نص  بـ طول 50. سمِّه Landcover.استخدم الدالة CASE...WHEN لذلك:
 

Add Level 1 Class Names

باستخدام هذه الدالة، يمكنك كتابة الشروط. وهذا يعني على سبيل المثال: إذا كانت الخاصية في الحقل Level1 تساوي القيمة 1، فإن النتيجة هي السلسلة النصية (String) "Artificial"، وهكذا.
 
5. قم بـ تعطيل وضع التحرير (Toggle editing off) و حفظ التعديلات.
 
يجب أن يظهر جدول الخصائصالآن كما يلي: 



attribute-table-percentage-complete.png

شاهد هذا الفيديو للتحقق من خطوات هذا القسم:

6. DataPlotly إنشاء مخططات دائرية باستخدام ملحق

الآن بعد أن حصلنا على النسبة المئوية (Percentage) لـ الغطاء الأرضي لكل مستجمع مائي فرعي، يمكننا إنشاء مخططات دائرية (Pie charts). تتمثل إحدى الطرق في نسخ الـ أعمدة (Columns) ولصقها في برامج الجداول الحسابية (Spreadsheet) لمزيد من المعالجة (Processing). وهناك طريقة أخرى وهي استخدام ملحق DataPlotly، وهو ما سنستخدمه هنا.
 
1. قُم بتثبيت ملحق Data Plotly من مدير الملحقات (Plugin Manager).
 
سنقوم بإنشاء مخطط دائري لكل مستجمع مائي فرعي. لقد قمنا سابقاً بتعيين معرّف فريد (Unique ID) لكل مستجمع مائي فرعي في حقل DN .
 
2. انقر فوق زرDataPlotly button DataPlotly لفتح لوحة DataPlotly .
 
3. بالنسبة لـ نوع الرسم (Plot Type)، اختر Pie Chart (مخطط دائري). وتحت معلمات الرسم (Plot Parameters)، اختر طبقة corine_catch_intersected_cor layer.
 
4. انقر فوق زر التجاوز المحدد بالبيانات Data defined override (Data defined override) عند المجموعة الفرعية للمعالم (Feature subset) واخترتحرير (Edit).
 
5. في مربع حوار منشئ السلسلة النصية للتعبير (Expression String Builder)، اكتب التعبير (Expression) التالي: 
"DN" = 0 
 بذلك سيتم استخدام المستجمع المائي الفرعي الذي يحمل قيمة DN تساوي0 فقط للمخطط الدائري. وبطريقة مماثلة، يمكنك تحديد المستجمعات المائية الفرعية الأخرى لإنشاء مخططات دائرية لها لاحقاً. انقر فوق OK للعودة إلى لوحة DataPlotly.
 
6. بالنسبة لـ حقل التجميع (Grouping field)، اختر Landcover، ولـ حقل Y اختر Percentage.
 
7. لإنشاء مفتاح الخريطة (Legend) بنفس ألوان بيانات المستوى 1، انقر فوق زر التجاوز المحدد بالبيانات Data defined override (Data defined override) بجوار لون العلامة واختر تحرير (Edit).
 
في مربع حوار منشئ السلسلة النصية للتعبير، يمكنك رؤية الصيغة المتوقعة للألوان.
 
اتبع التعليمات الموجودة في هذا الفيديو لربط ألوان طبقتك بمفتاح الخريطة الخاص بالمخطط الدائري. 

Data Plotly Settings for the Pie Chart

8. انقر فوق الزر dataplotly-legend-settings-button.png لضبط خصائص التخطيط (Layout properties). أضف عنوان الرسم (Plot title) وحدد المربع الخاص بـ مفتاح خريطة أفقي (Horizontal legend).

DataPlotly Legend Settings

9. انقر فوق زر Create Plot (إنشاء الرسم) وتحقق من النتيجة.
 
10. باستخدام زر Export to image dataplotly-export-as-image-button.png (تصدير إلى صورة)، يمكنك تصدير الرسم إلى ملف بصيغة png.
 
يجب أن تظهر النتيجة كما يلي:
 

Pie Chart Generated with the Data Plotly Plugin

يمكنك تكرار ذلك لـ المستجمعات المائية الفرعية (Subcatchments) الأخرى.
شاهد هذا الفيديو للتحقق من خطوات هذا القسم :

7. الخاتمة

لقد تعلمت في هذا الدرس كيفية:
 
  • إضافة قيم فريدة لطبقات البيانات الاتجاهية (Vector layers).
  • حساب مساحات المضلعات في جداول الخصائص.
  • تنسيق طبقة بيانات اتجاهية باستخدام ملف qml.
  • اقتطاع ، و إعادة إسقاط (Reproject)، و تصدير (Export) طبقات البيانات الاتجاهية إلى صيغة أخرى.
  • استخدام الشروط في حاسبة الحقول (Field calculator).
  • تطبيق أدوات المعالجة الجيومكانية (Geoprocessing tools) للبيانات الاتجاهية مثل الدمج (Dissolve)، و التقاطع (Intersection)، و االنطاق العازل(Buffer).
  • تصحيح أخطاء الهندسة المكانية (Geometry errors) .
  • إنشاء مخططات دائرية (Pie charts) باستخدام ملحق DataPlotly.
يمكنك مشاهدة قائمة التشغيل هذه التي تضم جميع فيديوهات هذا الدرس:
 

 

قبل المتابعة إلى الدرس 7، يرجى التأكد من تسليم التكليف الخاص بهذا الدرس عبر صفحة الدرس الرئيسية.