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 الخاص بك، يجب أن تحصل على صورة مثل الصورة أدناه:
شكل 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.
سيعرض هذا في الطرفية باستمرار ما يُكتب في ملف السجل ذاك. ويمكنك أيضًا فتح ثلاث طرفيات، واحدة لكل ملف سجل، هكذا:
شكل 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
شكل 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' )
يُفترض أن يُخرج الطلب أعلاه الصورة التالية:
شكل 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
يُفترض أن يُخرج لصق الطلب أعلاه في متصفح الويب الصورة التالية:
شكل 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
شكل 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 من متصفح الويب.
يُفترض أن ترى الآن الخريطة كما في الشكل التالي:
شكل 11.50 QGIS Web Client يستهلك المشروع world.qgs¶
إذا نقرت على زر الطباعة (Print) في QWC، فيمكنك إنشاء طلبات GetPrint تفاعليًا. ويمكنك أيضًا النقر على الأيقونة ? في QWC للوصول إلى المساعدة المتاحة لاكتشاف إمكانات QWC بشكل أفضل.
11.2.7. الخلاصة¶
تعلّمت كيفية استخدام QGIS Server لتقديم خدمات WMS.
11.2.8. ما التالي؟¶
سترى فيما يلي كيفية استخدام QGIS واجهةً أمامية لبرنامج GRASS GIS الشهير.