5.4. الدرس: الإجراءات¶
بعد أن رأيت إجراءً افتراضيًا في الدرس السابق، حان الوقت لتعريف إجراءاتك الخاصة.
الإجراء (action) هو شيء يحدث عند النقر على معلم. ويمكن أن يضيف كثيرًا من الوظائف الإضافية إلى خريطتك، كأن يتيح لك استرجاع معلومات إضافية عن كائن ما مثلًا. إن تعيين الإجراءات قد يضيف بُعدًا جديدًا كليًا إلى خريطتك!
هدف هذا الدرس: تعلّم كيفية إضافة إجراءات مخصصة.
ستستخدم في هذا الدرس الطبقة school_property التي أنشأتها سابقًا. تتضمن بيانات العيّنة صورًا لكل عقار من العقارات الثلاثة التي رقمنتها. ما سنفعله هو ربط كل عقار بصورته. ثم سننشئ إجراءً يفتح صورة العقار عند النقر عليه.
5.4.1. ★☆☆ تابع معنا: إضافة حقل للصور¶
لا تملك الطبقة school_property بعدُ وسيلة لربط صورة بعقار. سننشئ أولًا حقلًا لهذا الغرض.
افتح نافذة الحوار Layer Properties.
انقر على التبويب Fields.
بدّل وضع التحرير:
أضف عمودًا جديدًا:
أدخل القيم أدناه:
بعد إنشاء الحقل، انتقل إلى التبويب Attributes Form وحدّد الحقل
image.اضبط Widget Type على Attachment:
انقر على OK في نافذة الحوار Layer Properties.
استخدم الأداة
Identify Features للنقر على أحد المعالم الثلاثة في الطبقة school_property.بما أنك لا تزال في وضع التحرير، ينبغي أن تكون نافذة الحوار نشطة وأن تبدو هكذا:
انقر على زر الاستعراض (الزر ... المجاور للحقل image).
حدّد مسار صورتك. توجد الصور في
exercise_data/school_property_photos/وتحمل أسماء المعالم نفسها التي ينبغي ربطها بها.انقر على OK.
اربط جميع الصور بالمعالم الصحيحة باستخدام هذه الطريقة.
احفظ تعديلاتك واخرج من وضع التحرير.
5.4.2. ★☆☆ تابع معنا: إنشاء إجراء¶
افتح التبويب Actions للطبقة
school_property، وانقر على الزر
Add a new action.
في نافذة الحوار Add New Action، أدخل الكلمتين
Show Imageفي الحقل Description:
يختلف ما ستفعله بعد ذلك بحسب نظام التشغيل لديك، لذا اختر المسار المناسب لتتّبعه:
Windows
انقر على القائمة المنسدلة Type واختر Open.
Ubuntu Linux
تحت Action، اكتب
eogلاستخدام Gnome Image Viewer، أو اكتبdisplayلاستخدام ImageMagick. تذكّر أن تضع مسافة بعد الأمر!macOS
انقر على القائمة المنسدلة Type واختر Mac.
تحت Action، اكتب
open. تذكّر أن تضع مسافة بعد الأمر!
يمكنك الآن متابعة كتابة الأمر.
تريد فتح الصورة، وQGIS يعرف مكانها. كل ما عليه فعله هو إخبار Action بمكان الصورة.
اختر image من القائمة:
انقر على الزر Insert field. سيضيف QGIS العبارة
[% "image" %]في الحقل Action Text.انقر على الزر OK لإغلاق نافذة الحوار Add New Action
انقر على OK لإغلاق نافذة الحوار Layer Properties
حان الوقت الآن لاختبار الإجراء الجديد:
انقر على الطبقة
school_propertyفي لوحة Layers بحيث تصبح مظلّلة.انقر على السهم المتجه إلى الأسفل على يمين هذا الزر. يوجد حتى الآن إجراء واحد فقط معرّف لهذه الطبقة، وهو الإجراء الذي أنشأته للتو.
انقر على الزر نفسه لتفعيل الأداة.
باستخدام هذه الأداة، انقر على أيٍّ من عقارات المدرسة الثلاثة.
ينبغي أن تُفتح صورة ذلك العقار.
5.4.3. ★★☆ تابع معنا: البحث في الإنترنت¶
لنفترض أننا ننظر إلى الخريطة ونريد معرفة المزيد عن المنطقة التي تقع فيها مزرعة ما. افترض أنك لا تعرف شيئًا عن تلك المنطقة وتريد العثور على معلومات عامة عنها. أول ما سيخطر ببالك، بما أنك تستخدم حاسوبًا الآن، هو على الأرجح البحث عن اسم المنطقة في Google. لذا لنطلب من QGIS أن يفعل ذلك تلقائيًا نيابةً عنا!
افتح جدول البيانات الوصفية للطبقة
landuse.سنستخدم الحقل
nameلكل منطقة من مناطق استخدام الأراضي للبحث في Google.أغلق جدول البيانات الوصفية.
ارجع إلى Actions في Layer Properties.
انقر على الزر Create Default Actions لإضافة عدد من الإجراءات المعرّفة مسبقًا.
احذف جميع الإجراءات باستثناء الإجراء Open URL ذي الاسم المختصر Search Web باستخدام الزر
Remove the selected action في الأسفل.انقر نقرًا مزدوجًا على الإجراء المتبقي لتحريره
غيّر Description إلى
Google Search، واحذف محتوى الحقل Short Name.تأكد من أن Canvas من بين Action scopes المحددة.
يختلف ما ستفعله بعد ذلك بحسب نظام التشغيل لديك، لذا اختر المسار المناسب لتتّبعه:
Windows
تحت Type، اختر Open. سيطلب هذا من Windows فتح عنوان إنترنت في متصفحك الافتراضي، مثل Internet Explorer.
Ubuntu Linux
تحت Action، اكتب
xdg-open. سيطلب هذا من Ubuntu فتح عنوان إنترنت في متصفحك الافتراضي، مثل Chrome أو Firefox.macOS
تحت Action، اكتب
open. سيطلب هذا من macOS فتح عنوان إنترنت في متصفحك الافتراضي، مثل Safari.
يمكنك الآن متابعة كتابة الأمر
أيًّا كان الأمر الذي استخدمته أعلاه، عليك أن تخبره بعنوان الإنترنت الذي سيفتحه بعد ذلك. تريد منه زيارة Google، والبحث عن عبارة تلقائيًا.
عادةً عندما تستخدم Google، تُدخل عبارة البحث في شريط بحث Google. لكنك تريد في هذه الحالة أن يفعل حاسوبك ذلك نيابةً عنك. والطريقة التي تطلب بها من Google البحث عن شيء ما (إن لم تُرد استخدام شريط البحث مباشرةً) هي أن تعطي متصفح الإنترنت العنوان
https://www.google.com/search?q=SEARCH_PHRASE، حيثSEARCH_PHRASE`هي ما تريد البحث عنه. وبما أننا لا نعرف بعدُ العبارة التي سنبحث عنها، فسنُدخل الجزء الأول فقط (من دون عبارة البحث).في الحقل Action، اكتب
https://www.google.com/search?q=. تذكّر أن تضيف مسافة بعد أمرك الأوّلي قبل كتابة هذا!تريد الآن من QGIS أن يطلب من المتصفح أن يطلب من Google البحث عن قيمة
nameلأي معلم قد تنقر عليه.اختر الحقل name.
انقر على الزر Insert:
معنى هذا أن QGIS سيفتح المتصفح ويوجّهه إلى العنوان
https://www.google.com/search?q=[% "name" %]. تطلب[% "name" %]من QGIS استخدام محتوى الحقلnameبوصفه العبارة المراد البحث عنها.فإذا كانت منطقة استخدام الأراضي التي تنقر عليها مثلًا تحمل الاسم
Marloth Nature Reserve، فسيوجّه QGIS المتصفح إلىhttps://www.google.com/search?q=Marloth%20Nature%20Reserve، مما يجعل متصفحك يزور Google، الذي سيبحث بدوره عن "Marloth Nature Reserve".إن لم تكن قد فعلت ذلك بعد، فاضبط كل شيء كما شُرح أعلاه.
انقر على الزر OK لإغلاق نافذة الحوار Add New Action
انقر على OK لإغلاق نافذة الحوار Layer Properties
والآن لنختبر الإجراء الجديد.
مع تفعيل الطبقة
landuseفي لوحة Layers، انقر على السهم المتجه إلى الأسفل على يمين الزر
Run feature action، واختر الإجراء الوحيد (Google Search) المعرّف لهذه الطبقة.انقر على أي منطقة استخدام أراضٍ تراها على الخريطة. سيُفتح متصفحك الآن، وسيبدأ بحثًا في Google عن المكان المسجّل في قيمة
nameلتلك المنطقة.
ملاحظة
إن لم يعمل الإجراء، فتحقّق من أن كل شيء أُدخل بشكل صحيح؛ فالأخطاء الإملائية شائعة في هذا النوع من العمل!
5.4.4. ★★★ تابع معنا: فتح صفحة ويب مباشرةً في QGIS¶
رأيت أعلاه كيفية فتح صفحة ويب في متصفح خارجي. ولهذا الأسلوب بعض العيوب، إذ يضيف اعتمادية غير معروفة: هل سيملك المستخدم النهائي البرنامج المطلوب لتنفيذ الإجراء على نظامه؟ وكما رأيت، فقد لا يملكون حتى الأمر الأساسي نفسه للنوع نفسه من الإجراءات، إن لم تكن تعرف نظام التشغيل الذي سيستخدمونه. ومع بعض إصدارات أنظمة التشغيل، قد لا تعمل أوامر فتح المتصفح المذكورة أعلاه إطلاقًا. وقد تكون هذه مشكلة لا يمكن تجاوزها.
غير أن QGIS مبني على مكتبة Qt القوية والمرنة للغاية. كما يمكن أن تكون إجراءات QGIS أوامر Python اعتباطية ومُرمَّزة (أي تستخدم معلومات متغيرة بحسب محتوى سمة حقل ما)!
سترى الآن كيفية استخدام إجراء Python لعرض صفحة ويب. الفكرة العامة هي نفسها فتح موقع في متصفح خارجي، لكنها لا تتطلب وجود متصفح على نظام المستخدم لأنها تستخدم الصنف QWebView من Qt (وهو عنصر واجهة html مبني على webkit) لعرض المحتوى في نافذة منبثقة.
لنستخدم Wikipedia هذه المرة. سيبدو عنوان URL الذي تطلبه هكذا:
https://wikipedia.org/wiki/SEARCH_PHRASE
لإنشاء إجراء الطبقة:
افتح نافذة الحوار Layer Properties وانتقل إلى التبويب Actions.
أنشئ إجراءً جديدًا بالخصائص التالية:
Type:
PythonDescription:
WikipediaScope:
Feature،CanvasAction Text:
from qgis.PyQt.QtCore import QUrl from qgis.PyQt.QtWebKitWidgets import QWebView myWV = QWebView(None) myWV.load(QUrl('https://wikipedia.org/wiki/[%name%]')) myWV.show()
هناك أمران يحدثان هنا:
ستُستبدل
[%name%]بقيمة السمة الفعلية عند استدعاء الإجراء (كما في السابق).تُنشئ الشيفرة ببساطة نسخة جديدة من
QWebView، وتضبط عنوان URL الخاص بها، ثم تستدعيshow()عليها لجعلها ظاهرة بوصفها نافذة على سطح مكتب المستخدم.
يمكنك أيضًا استخدام هذا الأسلوب لعرض صورة دون اشتراط وجود عارض صور معيّن على نظام المستخدمين.
حاول استخدام الطرق الموضّحة أعلاه لتحميل صفحة من Wikipedia باستخدام إجراء Wikipedia الذي أنشأته للتو.
5.4.5. الخلاصة¶
تتيح لك الإجراءات منح خريطتك وظائف إضافية مفيدة للمستخدم النهائي الذي يعرض الخريطة نفسها في QGIS. ونظرًا لأن العمليات المستدعاة يمكن أن تكون أوامر shell لأي نظام تشغيل، إضافةً إلى Python، فلا حدود للوظائف التي يمكنك دمجها!
5.4.6. ما التالي؟¶
بعد أن أجريت جميع أنواع إنشاء البيانات المتجهية، ستتعلّم كيفية تحليل البيانات لحل المسائل. وهذا هو موضوع الوحدة التالية.