18.33. استخدام البرامج النصية في المعالجة¶
وحدة أسهم بها Matteo Ghetta - بتمويل من Scuola Superiore Sant'Anna
تتيح Processing (مع الإضافة Processing R Provider) كتابة سكربتات R وتشغيلها داخل QGIS.
تحذير
يجب أن يكون R مثبّتًا على حاسوبك وأن يكون متغيّر PATH مضبوطًا بشكل صحيح. علاوة على ذلك، تكتفي Processing باستدعاء حزم R الخارجية، ولا تستطيع تثبيتها. لذا تأكّد من تثبيت الحزم الخارجية مباشرة في R. راجع الفصل ذا الصلة في دليل المستخدم.
ملاحظة
إذا واجهت مشكلات في الحزم، فقد يكون ذلك مرتبطًا بنقص حزم إلزامية تتطلّبها Processing، مثل sp و rgdal و raster.
18.33.1. مضيفا البرامج النصية¶
إضافة سكربت أمر بسيط. أسهل طريقة هي فتح صندوق أدوات المعالجة واختيار Create new R script... من قائمة R (المميّزة بأيقونة R) أعلى صندوق أدوات المعالجة. يمكنك أيضًا إنشاء السكربت في محرّر نصوص مثلًا وحفظه في مجلد سكربتات R لديك (processing/rscripts). وعندما يُحفظ هناك، سيصبح متاحًا للتعديل بالنقر بزر الفأرة الأيمن على اسم السكربت في صندوق أدوات المعالجة ثم اختيار Edit Script...).
ملاحظة
إذا لم ترَ R في Processing، فعليك تفعيله من
يفتح ذلك R Script Editor حيث عليك تحديد بعض المعاملات قبل أن تتمكن من إضافة متن السكربت.
18.33.2. خلق المؤامرات¶
في هذا الدرس التطبيقي سننشئ مخطّطًا صندوقيًا (boxplot) لحقل من طبقة متجهية.
افتح مشروع QGIS r_intro.qgs الموجود في المجلد exercise_data/processing/r_intro/.
معلمات البرمجة النصية¶
افتح المحرر وابدأ الكتابة في بدايته
يجب أن تحدّد بعض المعاملات قبل متن السكربت:
اسم المجموعة (plots في هذه الحالة) التي تريد وضع سكربتك فيها (إذا لم تكن المجموعة موجودة، فستُنشأ):
##plots=groupستجد سكربتك في مجموعة R المسمّاة plots في صندوق أدوات المعالجة.
عليك أن تُخبر Processing بأنك تريد عرض مخطّط بياني (في هذا المثال):
##showplotsستجد بعد ذلك رابطًا إلى المخطّط في اللوحة Result Viewer (يمكن إظهارها / إخفاؤها من ومن ).
عليك أيضًا أن تُخبر Processing ببيانات الإدخال. في هذا المثال نريد إنشاء مخطّط من حقل في طبقة متجهية:
##Layer=vectorتعرف Processing الآن أن المُدخل طبقة متجهية. الاسم Layer غير مهم، المهم هو المعامل vector.
أخيرًا، عليك تحديد حقل الإدخال من الطبقة المتجهية (باستخدام الاسم الذي حدّدته أعلاه - Layer):
##X=Field Layerتعرف Processing الآن أنك تحتاج إلى حقل من Layer، وأنك ستسمّيه X.
يمكن أيضًا تعريف اسم سكربتك باستخدام
name:##My box plot script=nameإذا لم يُعرَّف، فسيُستخدم اسم الملف اسمًا للسكربت.
نص برمجي¶
بعد أن أعددت ترويسة السكربت، يمكنك إضافة الدالة:
boxplot(Layer[[X]])
boxplot هو اسم دالة R، والمعامل Layer هو الاسم الذي عرّفته لمجموعة بيانات الإدخال، و X هو الاسم الذي عرّفته لحقل مجموعة البيانات تلك.
تحذير
يجب أن يكون المعامل X بين قوسين مربعين مزدوجين ([[]]).
يبدو النص النهائي مثل هذا
##Vector processing=group
##showplots
##Layer=vector
##X=Field Layer
boxplot(Layer[[X]])
احفظ السكربت في المسار الافتراضي الذي تقترحه Processing (processing/rscripts). إذا لم تعرّف name في ترويسة السكربت، فسيصبح اسم الملف الذي تختاره هو اسم السكربت في صندوق أدوات المعالجة.
ملاحظة
يمكنك حفظ السكربت في أي مكان تريده، لكن Processing لن تتمكن حينها من تضمينه في صندوق أدوات المعالجة تلقائيًا، لذا عليك تحميله يدويًا.
الآن فقط قم بتشغيله باستخدام الزر الموجود أعلى نافذة المحرر:
بعد إغلاق نافذة المحرّر، استخدم مربع النص في Processing للعثور على سكربتك:
يمكنك الآن ملء المعاملات المطلوبة في نافذة خوارزمية Processing:
في Layer اختر
sample_pointsفي الحقل X اختر
value
انقر على Run.
يُفترض أن تُفتح Result window تلقائيًا، وإن لم تُفتح، فانقر ببساطة على .
انقر على الرابط في العارض وسترى:
ملاحظة
يمكنك فتح الصورة ونسخها وحفظها بالنقر بزر الفأرة الأيمن على المخطّط.
18.33.3. خلق ناقلات¶
يمكنك أيضًا إنشاء طبقة متجهية وتحميلها تلقائيًا في QGIS.
أُخذ المثال التالي من السكربت Random sampling grid الموجود في المجموعة الإلكترونية لسكربتات R (يمكن العثور على سكربتات هذه المجموعة في https://github.com/qgis/QGIS-Processing/tree/master/rscripts).
الهدف من هذا التمرين هو إنشاء طبقة متجهية من نقاط عشوائية باستخدام طبقة متجهية مُدخلة لتقييد الامتداد، وذلك باستخدام الدالة spsample من الحزمة sp.
معلمات البرمجة النصية¶
كما في السابق، علينا ضبط بعض المعاملات قبل متن السكربت:
حدّد اسم المجموعة التي تريد وضع سكربتك فيها، وهي في هذه الحالة Point pattern analysis:
##Point pattern analysis=groupعرّف معامل إدخال (طبقة متجهية) سيقيّد مواضع النقاط العشوائية:
##Layer=vectorاضبط معامل إدخال لعدد النقاط التي ستُنشأ (
Size، بقيمة افتراضية10):##Size=number 10ملاحظة
بما أن هناك قيمة افتراضية معرّفة (
10)، يمكن للمستخدم تغيير هذا العدد أو ترك المعامل دون رقم.حدّد أن هناك طبقة متجهية ناتجة (تُسمّى
Output):##Output=output vector
نص برمجي¶
الآن يمكنك إضافة نص الدالة:
استخدم الدالة
spsample:pts=spsample(Layer, Size, type="random")
تستخدم الدالة Layer لتقييد مواضع النقاط (إذا كانت طبقة خطوط، فيجب أن تقع النقطة على أحد خطوط الطبقة، وإذا كانت طبقة مضلعات، فيجب أن تقع النقطة داخل مضلع). ويؤخذ عدد النقاط من المعامل Size. وطريقة أخذ العيّنات هي random.
أنشئ المخرج (المعامل
Output):Output=SpatialPointsDataFrame(pts, as.data.frame(pts))
يبدو النص النهائي مثل هذا
##Point pattern analysis=group
##Layer=vector
##Size=number 10
##Output=output vector
pts=spsample(Layer, Size, type="random")
Output=SpatialPointsDataFrame(pts, as.data.frame(pts))
احفظه وشغّله بالنقر على زر التشغيل.
في نافذة نوع جديد في المعلمات الصحيحة:
وانقر على تشغيل.
ستُضاف الطبقة الناتجة إلى جدول المحتويات وستُعرض نقاطها على لوحة الخريطة:
18.33.4. المخرجات النصية والبيانية من R - الصياغة¶
تستخدم Processing (مع Processing R Provider plugin) صياغة خاصة لاستخراج النتائج من R:
وجود
>قبل الأمر، كما في>lillie.test(Layer[[Field]])، يعني أن النتيجة يجب أن تُرسل إلى مخرجات R (عارض النتائج)وجود
+بعد مخطّط يتيح تراكب المخطّطات. على سبيل المثالplot(Layer[[X]], Layer[[Y]]) + abline(h=mean(Layer[[X]]))