18.12. تحديد الامتدادات

ملاحظة

في هذا الدرس سنرى كيفية تحديد الامتدادات، التي تحتاجها بعض الخوارزميات، وخاصة الخوارزميات الشبكية.

تتطلب بعض الخوارزميات امتدادًا لتحديد المنطقة التي سيغطيها التحليل الذي تجريه، وعادةً لتحديد امتداد الطبقة الناتجة.

عندما يكون الامتداد مطلوبًا، يمكن تحديده يدويًا بإدخال القيم الأربع التي تعرّفه (min X و min Y و max X و max Y)، لكن هناك أيضًا طرق أخرى أكثر عملية وإثارة للاهتمام. وسنرى جميعها في هذا الدرس.

أولًا، لنفتح خوارزمية تتطلب تحديد امتداد. افتح الخوارزمية Rasterize (vector to raster)، التي تنشئ طبقة شبكية من طبقة متجهية.

../../../_images/rasterize1.png

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

أول ما يمكنك فعله هو كتابة القيم الأربع المحدِّدة الموضّحة سابقًا، مفصولة بفواصل.

../../../_images/type.png

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

../../../_images/menu1.png

لنرَ ما يفعله كل واحد منها.

الخيار الأول هو Use layer/canvas extent، الذي سيعرض نافذة الاختيار الموضّحة أدناه.

../../../_images/layer.png

هنا يمكنك اختيار امتداد لوحة الخريطة (الامتداد الذي يغطيه مستوى التكبير الحالي)، أو امتداد أيٍّ من الطبقات المتاحة. اختره وانقر على OK، وسيُملأ مربع النص تلقائيًا بالقيم المقابلة.

الخيار الثاني هو Select extent on canvas. في هذه الحالة تختفي نافذة حوار الخوارزمية ويمكنك النقر والسحب على لوحة خريطة QGIS لتحديد الامتداد المطلوب.

../../../_images/extent_drag.png

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

الخيار الأخير هو Use min covering extent from input layers، وهو الخيار الافتراضي. سيحسب هذا الخيار أصغر امتداد يغطي جميع الطبقات المستخدمة لتشغيل الخوارزمية، ولا حاجة إلى إدخال أي قيمة في مربع النص. وفي حالة وجود طبقة إدخال واحدة، كما في الخوارزمية التي نشغّلها، يمكن الحصول على الامتداد نفسه باختيار طبقة الإدخال ذاتها في Use layer/canvas extent الذي رأيناه سابقًا. لكن عند وجود عدة طبقات إدخال، لا يقابل أصغر امتداد مغطٍّ امتداد أيٍّ من طبقات الإدخال، لأنه يُحسب منها جميعًا معًا.

سنستخدم هذه الطريقة الأخيرة لتنفيذ خوارزمية التحويل إلى شبكية.

املأ نافذة حوار المعاملات كما هو موضّح أدناه، واضغط على OK.

../../../_images/parameters.png

ملاحظة

في هذه الحالة، من الأفضل استخدام Integer (1 byte) بدلًا من Floating point (4 byte)، لأن NAME عدد صحيح قيمته القصوى 64. وسينتج عن ذلك حجم ملف أصغر وعمليات حسابية أسرع.

ستحصل على طبقة شبكية تغطي بالضبط المنطقة التي تغطيها الطبقة المتجهية الأصلية.

../../../_images/result.png

في بعض الحالات، قد لا يكون الخيار الأخير Use min covering extent from input layers متاحًا. ويحدث هذا في الخوارزميات التي ليس لها طبقات إدخال، بل معاملات من أنواع أخرى فقط. في هذه الحالة عليك إدخال القيمة يدويًا أو استخدام أيٍّ من الخيارات الأخرى.

لاحظ أنه عند وجود تحديد، يكون امتداد الطبقة هو امتداد مجموعة المعالم كلها، ولا يُستخدم التحديد لحساب الامتداد، رغم أن التحويل إلى شبكية يُنفَّذ على العناصر المحددة فقط. في هذه الحالة قد ترغب فعلًا في إنشاء طبقة جديدة من التحديد، ثم استخدامها كمدخل.