11.2. الدرس: تقديم خدمة WMS

البيانات المستخدمة في هذا التمرين متاحة في المجلد الفرعي qgis-server-tutorial-data من بيانات التدريب التي نزّلتها. وللتسهيل وتجنب مشكلات الصلاحيات المحتملة، سنفترض أن هذه الملفات مخزنة في المجلد /home/qgis/projects. لذا عدّل التعليمات التالية لتناسب مسارك.

تحتوي البيانات التجريبية على مشروع QGIS باسم world.qgs مُعدّ مسبقًا لتقديمه عبر QGIS Server. إذا أردت استخدام مشروعك الخاص أو تعلّم كيفية إعداد مشروع، فراجع القسم ضبط مشروعك.

ملاحظة

تعرض هذه الوحدة عناوين URL بطريقة تتيح للقارئ تمييز المعاملات وقيمها بسهولة. فبينما الصيغة العادية هي:

...&field1=value1&field2=value2&field3=value3

يستخدم هذا الدرس:

&field1=value1
&field2=value2
&field3=value3

يعمل لصقها في Mozilla Firefox بشكل صحيح، لكن متصفحات ويب أخرى مثل Chrome قد تضيف مسافات غير مرغوب فيها بين أزواج field:parameter. لذا إن واجهت هذه المشكلة، فيمكنك إما استخدام Firefox أو تعديل عناوين URL لتصبح في سطر واحد.

لنرسل طلب WMS GetCapabilities في متصفح الويب أو باستخدام curl:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetCapabilities
&map=/home/qgis/projects/world.qgs

في تهيئة Apache من الدرس السابق، يضبط المتغير QGIS_PROJECT_FILE المشروع الافتراضي على /home/qgis/projects/world.qgs. لكننا في الطلب أعلاه استخدمنا المعامل map للتصريح بذلك وإظهار إمكانية استخدامه للإشارة إلى أي مشروع. وإذا حذفت المعامل map من الطلب أعلاه فسيُخرج QGIS Server الاستجابة نفسها.

عند توجيه أي عميل WMS إلى عنوان GetCapabilities، يحصل العميل في الاستجابة على مستند XML يحتوي على البيانات الوصفية لمعلومات خادم خرائط الويب، مثل الطبقات التي يقدمها، والتغطية الجغرافية، وبأي صيغة، وأي إصدار من WMS، إلخ.

بما أن QGIS هو أيضًا عميل WMS/WMTS، يمكنك إنشاء اتصال جديد بخادم WMS بمساعدة عنوان GetCapabilities أعلاه. راجع القسم الدرس: خدمات الخرائط على الويب (WMS) أو القسم اختيار خوادم WMS/WMTS لمعرفة كيفية فعل ذلك.

بإضافة طبقة WMS المسماة countries إلى مشروع QGIS الخاص بك، يجب أن تحصل على صورة مثل الصورة أدناه:

../../../_images/qgis_getmap_request.png

شكل 11.44 QGIS Desktop يستهلك خدمة WMS لطبقة countries من QGIS Server

ملاحظة

يقدّم QGIS Server الطبقات المعرّفة في المشروع world.qgs. وبفتح المشروع في QGIS يمكنك أن ترى وجود أنماط متعددة لطبقة countries. ويعرف QGIS Server ذلك أيضًا، ويمكنك اختيار النمط الذي تريده في طلبك. وقد اختير النمط classified_by_population في الصورة أعلاه.

11.2.1. السجلات

عند إعداد خادم، تكون السجلات مهمة دائمًا لأنها تبيّن لك ما يحدث. وقد أعددنا في الملف *.conf السجلات التالية:

  • سجل QGIS Server في /logs/qgisserver.log

  • سجل الوصول في Apache للموقع qgisplatform.demo في qgisplatform.demo.access.log

  • سجل الأخطاء في Apache للموقع qgisplatform.demo في qgisplatform.demo.error.log

ملفات السجل مجرد ملفات نصية، لذا يمكنك استخدام محرر نصوص للاطلاع عليها. ويمكنك أيضًا استخدام الأمر tail في الطرفية: sudo tail -f /logs/qgisserver.log.

سيعرض هذا في الطرفية باستمرار ما يُكتب في ملف السجل ذاك. ويمكنك أيضًا فتح ثلاث طرفيات، واحدة لكل ملف سجل، هكذا:

../../../_images/terminal_tail_log.jpg

شكل 11.45 استخدام الأمر tail لعرض مخرجات سجلات QGIS Server

عند استخدام QGIS Desktop لاستهلاك خدمات WMS في QGIS Server، سترى جميع الطلبات التي يرسلها QGIS إلى الخادم في سجل الوصول، وأخطاء QGIS Server في سجل QGIS Server، إلخ.

ملاحظة

  • إذا نظرت إلى السجلات في الأقسام التالية، فستفهم ما يحدث بشكل أفضل.

  • بإعادة تشغيل Apache أثناء متابعة سجل QGIS Server، يمكنك العثور على بعض الإشارات الإضافية حول كيفية عمل الأمور.

11.2.2. طلبات GetMap

لعرض الطبقة countries، يستخدم QGIS Desktop، مثل أي عميل WMS آخر، طلبات GetMap.

يبدو الطلب البسيط هكذا:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&LAYERS=countries
&FORMAT=image/jpeg

يُفترض أن يُخرج الطلب أعلاه الصورة التالية:

شكل: طلب GetMap بسيط إلى QGIS Server

../../../_images/getmap_simple_request.jpg

شكل 11.46 استجابة QGIS Server بعد طلب GetMap بسيط

11.2.3. ★★☆ جرّب بنفسك: غيّر معاملات الصورة والطبقات

بناءً على الطلب أعلاه، لنستبدل الطبقة countries بطبقة أخرى.

لمعرفة الطبقات الأخرى المتاحة، يمكنك فتح المشروع world.qgs في QGIS والاطلاع على محتوياته. لكن ضع في اعتبارك أن عملاء WMS لا يمكنهم الوصول إلى مشروع QGIS، بل ينظرون فقط إلى محتويات مستند القدرات (capabilities).

كما يوجد خيار تهيئة يجعل QGIS يتجاهل بعض الطبقات الموجودة في مشروع QGIS عند تقديم خدمة WMS.

لذا يمكنك الاطلاع على قائمة الطبقات عند توجيه QGIS Desktop إلى عنوان GetCapabilities، أو يمكنك أن تحاول بنفسك العثور على أسماء طبقات أخرى في استجابة XML لطلب GetCapabilities.

من أسماء الطبقات التي يمكنك العثور عليها والتي تعمل countries_shapeburst. قد تجد غيرها، لكن ضع في اعتبارك أن بعضها قد لا يكون مرئيًا عند مقياس رسم صغير كهذا، فقد تحصل على صورة فارغة استجابةً.

يمكنك أيضًا تجربة معاملات أخرى مما سبق، مثل تغيير نوع الصورة المُعادة إلى image/png.

11.2.4. ★★☆ تابع معنا: استخدام المعاملات Filter و Opacities و Styles

لنرسل طلبًا آخر يضيف طبقة أخرى وبعض المعاملات الأساسية و FILTER و OPACITIES، ويستخدم أيضًا المعامل القياسي STYLES.

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&FORMAT=image/jpeg
&LAYERS=countries,countries_shapeburst
&STYLES=classified_by_name,blue
&OPACITIES=255,30
&FILTER=countries:"name" IN ( 'Germany' , 'Italy' )

يُفترض أن يُخرج الطلب أعلاه الصورة التالية:

../../../_images/getmap_filter_opacities.jpg

شكل 11.47 استجابة لطلب GetMap يتضمن المعاملين FILTER و OPACITIES

كما ترى من الصورة أعلاه، طلبنا من QGIS Server، من بين أمور أخرى، أن يرسم Germany و Italy فقط من طبقة countries.

11.2.5. ★★☆ تابع معنا: استخدام Redlining

لنرسل طلب GetMap آخر يستخدم ميزة الرسم التوضيحي (redlining) والمعامل SELECTION المفصّل في القسم الأساسيات:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&LAYERS=countries,countries_shapeburst
&FORMAT=image/jpeg
&HIGHLIGHT_GEOM=POLYGON((590000 6900000, 590000 7363000, 2500000 7363000, 2500000 6900000, 590000 6900000))
&HIGHLIGHT_SYMBOL=<StyledLayerDescriptor><UserStyle><Name>Highlight</Name><FeatureTypeStyle><Rule><Name>Symbol</Name><LineSymbolizer><Stroke><SvgParameter name="stroke">%233a093a</SvgParameter><SvgParameter name="stroke-opacity">1</SvgParameter><SvgParameter name="stroke-width">1.6</SvgParameter></Stroke></LineSymbolizer></Rule></FeatureTypeStyle></UserStyle></StyledLayerDescriptor>
&HIGHLIGHT_LABELSTRING=QGIS Tutorial
&HIGHLIGHT_LABELSIZE=30
&HIGHLIGHT_LABELCOLOR=%23000000
&HIGHLIGHT_LABELBUFFERCOLOR=%23FFFFFF
&HIGHLIGHT_LABELBUFFERSIZE=3
&SELECTION=countries:171,65

يُفترض أن يُخرج لصق الطلب أعلاه في متصفح الويب الصورة التالية:

../../../_images/getmap_redlining_selection.jpg

شكل 11.48 استجابة لطلب يتضمن ميزة REDLINING والمعامل SELECTION

يمكنك أن ترى من الصورة أعلاه أن الدولتين ذواتي المعرّفين 171 و 65 قد أُبرزتا باللون الأصفر (Romania و France) باستخدام المعامل SELECTION، واستخدمنا ميزة REDLINING لتركيب مستطيل يحمل التسمية QGIS Tutorial.

11.2.6. طلبات GetPrint

من الميزات الرائعة جدًا في QGIS Server أنه يستخدم تخطيطات الطباعة في QGIS Desktop. يمكنك التعرف على ذلك في القسم GetPrint.

إذا فتحت المشروع world.qgs في QGIS Desktop فستجد تخطيط طباعة باسم Population distribution. وفيما يلي طلب GetPrint مبسّط يوضح هذه الميزة المذهلة:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?map=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0&
REQUEST=GetPrint
&FORMAT=pdf
&TRANSPARENT=true
&SRS=EPSG:3857
&DPI=300
&TEMPLATE=Population distribution
&map0:extent=-432786,4372992,3358959,7513746
&LAYERS=countries
../../../_images/getprint.jpg

شكل 11.49 يعرض ملف pdf الناتج عن طلب GetPrint أعلاه

بطبيعة الحال، من الصعب كتابة طلبات GetMap و GetPrint وغيرها بنفسك.

QGIS Web Client أو QWC هو مشروع عميل ويب يمكنه العمل إلى جانب QGIS Server لتتمكن من نشر مشاريعك على الويب، أو لمساعدتك في إنشاء طلبات QGIS Server لفهم الإمكانات بشكل أفضل.

يمكنك تثبيته هكذا:

  • بصفتك المستخدم qgis، انتقل إلى المجلد الرئيسي باستخدام cd /home/qgis.

  • نزّل مشروع QWC من هنا وفك ضغطه.

  • أنشئ رابطًا رمزيًا إلى المجلد /var/www/html لأنه DocumentRoot الذي ضبطناه في تهيئة المضيف الافتراضي. فإذا فككت ضغط الأرشيف في /home/qgis/Downloads/QGIS-Web-Client-master فيمكننا فعل ذلك باستخدام sudo ln -s /home/qgis/Downloads/QGIS-Web-Client-master /var/www/html/.

  • افتح العنوان http://qgisplatform.demo/QGIS-Web-Client-master/site/qgiswebclient.html?map=/home/qgis/projects/world.qgs من متصفح الويب.

يُفترض أن ترى الآن الخريطة كما في الشكل التالي:

../../../_images/qwc.jpg

شكل 11.50 QGIS Web Client يستهلك المشروع world.qgs

إذا نقرت على زر الطباعة (Print) في QWC، فيمكنك إنشاء طلبات GetPrint تفاعليًا. ويمكنك أيضًا النقر على الأيقونة ? في QWC للوصول إلى المساعدة المتاحة لاكتشاف إمكانات QWC بشكل أفضل.

11.2.7. الخلاصة

تعلّمت كيفية استخدام QGIS Server لتقديم خدمات WMS.

11.2.8. ما التالي؟

سترى فيما يلي كيفية استخدام QGIS واجهةً أمامية لبرنامج GRASS GIS الشهير.