2. البدء¶
2.1. التثبيت على الأنظمة المبنية على Debian¶
سنقدم دليل تثبيت قصيرًا وبسيطًا لإعداد عامل بالحد الأدنى على الأنظمة المبنية على Debian (بما فيها Ubuntu ومشتقاتها). ومع ذلك، توفر توزيعات وأنظمة تشغيل أخرى كثيرة حزمًا لـ QGIS Server.
ملاحظة
في Ubuntu يمكنك استخدام مستخدمك العادي مع إضافة sudo قبل الأوامر التي تتطلب صلاحيات المدير. وفي Debian يمكنك العمل بصفة المدير (root) دون استخدام sudo.
المتطلبات وخطوات إضافة مستودعات QGIS الرسمية لتثبيت QGIS Server على نظام مبني على Debian متوفرة في صفحة مثبّتات QGIS. ويُستحسن أن تثبّت على الأقل أحدث إصدار طويل الأمد (LTR).
بعد ضبط مستودع الإصدار المستهدف وتثبيت QGIS Server، يمكنك اختبار التثبيت باستخدام:
/usr/lib/cgi-bin/qgis_mapserv.fcgi
إذا حصلت على المخرجات التالية، فالخادم مثبت بشكل صحيح.
ملاحظة
بحسب إصدار QGIS، قد ترى مخرجات مختلفة قليلًا عند تشغيل qgis_mapserv.fcgi.
QFSFileEngine::open: No file name specified
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver JP2ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver JP2ECW to unload from GDAL_SKIP environment variable.
Content-Length: 206
Content-Type: text/xml; charset=utf-8
<ServiceExceptionReport version="1.3.0" xmlns="https://www.opengis.net/ogc">
<ServiceException code="Service configuration error">Service unknown or unsupported</ServiceException>
</ServiceExceptionReport>
ملاحظة
كما يظهر أدناه، يُبلغ QGIS عن رمز الحالة 400، وهو ما يدل بشكل صحيح على فشل الطلب لعدم وجود جلسة http نشطة. هذا ليس خطأً برمجيًا، بل يشير إلى أن الخادم يعمل بشكل سليم.
Application path not initialized
Application path not initialized
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver JP2ECW to unload from GDAL_SKIP environment variable.
"Loading native module /usr/lib/qgis/server/libdummy.so"
"Loading native module /usr/lib/qgis/server/liblandingpage.so"
"Loading native module /usr/lib/qgis/server/libwcs.so"
"Loading native module /usr/lib/qgis/server/libwfs.so"
"Loading native module /usr/lib/qgis/server/libwfs3.so"
"Loading native module /usr/lib/qgis/server/libwms.so"
"Loading native module /usr/lib/qgis/server/libwmts.so"
QFSFileEngine::open: No file name specified
Content-Length: 102
Content-Type: application/json
Server: QGIS FCGI server - QGIS version 3.22.6-Białowieża
Status: 400
[{"code":"Bad request error","description":"Requested URI does not match any registered API handler"}]
لنُضف مشروعًا تجريبيًا. يمكنك استخدام مشروعك الخاص، أو أحد مشاريع بيانات التدريب التجريبية:
mkdir /home/qgis/projects/
cd /home/qgis/projects/
wget https://github.com/qgis/QGIS-Training-Data/archive/release_3.22.zip
unzip release_3.22.zip
mv QGIS-Training-Data-release_3.22/exercise_data/qgis-server-tutorial-data/world.qgs .
mv QGIS-Training-Data-release_3.22/exercise_data/qgis-server-tutorial-data/naturalearth.sqlite .
بالطبع يمكنك استخدام برنامج GIS المفضل لديك لفتح هذا الملف والاطلاع على الإعدادات والطبقات المتاحة.
لنشر QGIS Server بشكل صحيح تحتاج إلى خادم HTTP. والخيارات الموصى بها هي Apache أو NGINX.
2.1.1. خادم Apache HTTP¶
ملاحظة
فيما يلي، يرجى استبدال qgis.demo باسم خادمك أو عنوان IP الخاص به.
ثبّت Apache و mod_fcgid:
apt install apache2 libapache2-mod-fcgid
يمكنك تشغيل QGIS Server على موقعك الافتراضي، لكن لنضبط مضيفًا افتراضيًا (virtualhost) مخصصًا لذلك، كما يلي.
في المجلد
/etc/apache2/sites-available، أنشئ ملفًا باسمqgis.demo.confبهذا المحتوى:<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName qgis.demo DocumentRoot /var/www/html # Apache logs (different than QGIS Server log) ErrorLog ${APACHE_LOG_DIR}/qgis.demo.error.log CustomLog ${APACHE_LOG_DIR}/qgis.demo.access.log combined # Longer timeout for WPS... default = 40 FcgidIOTimeout 120 FcgidInitialEnv LC_ALL "en_US.UTF-8" FcgidInitialEnv PYTHONIOENCODING UTF-8 FcgidInitialEnv LANG "en_US.UTF-8" # QGIS log FcgidInitialEnv QGIS_SERVER_LOG_STDERR 1 FcgidInitialEnv QGIS_SERVER_LOG_LEVEL 0 # default QGIS project SetEnv QGIS_PROJECT_FILE /home/qgis/projects/world.qgs # QGIS_AUTH_DB_DIR_PATH must lead to a directory writeable by the Server's FCGI process user FcgidInitialEnv QGIS_AUTH_DB_DIR_PATH "/home/qgis/qgisserverdb/" FcgidInitialEnv QGIS_AUTH_PASSWORD_FILE "/home/qgis/qgisserverdb/qgis-auth.db" # Set pg access via pg_service file SetEnv PGSERVICEFILE /home/qgis/.pg_service.conf FcgidInitialEnv PGPASSFILE "/home/qgis/.pgpass" # if qgis-server is installed from packages in debian based distros this is usually /usr/lib/cgi-bin/ # run "locate qgis_mapserv.fcgi" if you don't know where qgis_mapserv.fcgi is ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin/"> AllowOverride None Options +ExecCGI -MultiViews -SymLinksIfOwnerMatch Require all granted </Directory> <IfModule mod_fcgid.c> FcgidMaxRequestLen 26214400 FcgidConnectTimeout 60 </IfModule> </VirtualHost>
ملاحظة
بعض خيارات الإعداد السابقة مشروحة في قسمي متغيرات البيئة و ملف pg_service الخاصين بالخادم.
لننشئ الآن المجلدات التي ستخزّن سجلات QGIS Server وقاعدة بيانات المصادقة:
mkdir -p /var/log/qgis/ chown www-data:www-data /var/log/qgis mkdir -p /home/qgis/qgisserverdb chown www-data:www-data /home/qgis/qgisserverdb
ملاحظة
www-dataهو مستخدم Apache في الأنظمة المبنية على Debian، ونحتاج إلى أن يملك Apache صلاحية الوصول إلى تلك المواقع أو الملفات. تغيّر أوامرchown www-data...مالك المجلدات والملفات المعنية إلىwww-data.
يمكننا الآن تفعيل المضيف الافتراضي والوحدة
fcgidإن لم يكن ذلك قد تم بالفعل:a2enmod fcgid a2enmod rewrite a2ensite qgis.demo
أعد الآن تشغيل Apache ليؤخذ الإعداد الجديد في الحسبان:
systemctl restart apache2
الآن بعد أن عرف Apache أن عليه الرد على الطلبات الموجهة إلى http://qgis.demo، نحتاج أيضًا إلى إعداد نظام العميل ليعرف من هو
qgis.demo. نقوم بذلك بإضافة127.0.0.1 qgis.demoإلى ملف hosts.# Replace 127.0.0.1 with the IP of your server. sh -c "echo '127.0.0.1 qgis.demo' >> /etc/hosts"
مهم
تذكّر أنه يجب ضبط كلٍّ من الملفين qgis.demo.conf و /etc/hosts لكي يعمل إعدادك. ويمكنك أيضًا اختبار الوصول إلى QGIS Server من عملاء آخرين على الشبكة (مثل أجهزة Windows أو macos) بالذهاب إلى ملف /etc/hosts الخاص بها وجعل الاسم qgis.demo يشير إلى عنوان IP الذي يملكه جهاز الخادم على الشبكة (وليس 127.0.0.1 لأنه العنوان المحلي الذي لا يمكن الوصول إليه إلا من الجهاز المحلي). على أجهزة *nix يقع ملف hosts في /etc، بينما يقع على Windows في المجلد C:\Windows\System32\drivers\etc. وعلى Windows عليك تشغيل محرر النصوص بصلاحيات المدير قبل فتح ملف hosts.
أصبح QGIS Server متاحًا الآن على http://qgis.demo. للتحقق، اكتب في المتصفح، كما في الحالة البسيطة:
http://qgis.demo/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
2.1.2. خادم NGINX HTTP¶
ملاحظة
فيما يلي، يرجى استبدال qgis.demo باسم خادمك أو عنوان IP الخاص به.
يمكنك أيضًا استخدام QGIS Server مع NGINX. وخلافًا لـ Apache، لا يُنشئ NGINX عمليات FastCGI تلقائيًا، بل يجب أن تُشغَّل عمليات FastCGI بواسطة شيء آخر.
ثبّت NGINX:
apt install nginx
الخيار الأول هو استخدام spawn-fcgi أو fcgiwrap لتشغيل عمليات QGIS Server وإدارتها. وتوجد حزم Debian رسمية لكليهما. وعندما لا يكون لديك خادم X قيد التشغيل وتحتاج مثلًا إلى الطباعة، يمكنك استخدام xvfb.
والخيار الآخر هو الاعتماد على Systemd، نظام التهيئة لـ GNU/Linux الذي تستخدمه معظم توزيعات Linux اليوم. ومن مزايا هذه الطريقة أنها لا تتطلب أي مكونات أو عمليات أخرى. وهي مصممة لتكون بسيطة، وفي الوقت نفسه متينة وفعالة لعمليات النشر في بيئة الإنتاج.
إعداد NGINX¶
التعليمة include fastcgi_params; المستخدمة في الإعداد السابق مهمة، لأنها تضيف المعاملات من /etc/nginx/fastcgi_params:
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
علاوة على ذلك، يمكنك استخدام بعض متغيرات البيئة لضبط QGIS Server. وفي ملف إعدادات NGINX /etc/nginx/nginx.conf، عليك استخدام التعليمة fastcgi_param لتعريف هذه المتغيرات كما هو موضح أدناه:
location /qgisserver {
gzip off;
include fastcgi_params;
fastcgi_param QGIS_SERVER_LOG_STDERR 1;
fastcgi_param QGIS_SERVER_LOG_LEVEL 0;
fastcgi_pass unix:/var/run/qgisserver.socket;
}
أغلفة FastCGI¶
تحذير
إعداد fcgiwrap أسهل من spawn-fcgi، لأنه مغلّف مسبقًا في خدمة Systemd. لكنه يؤدي أيضًا إلى حل أبطأ بكثير من استخدام spawn-fcgi. فمع fcgiwrap تُنشأ عملية QGIS Server جديدة لكل طلب، أي أن عملية تهيئة QGIS Server، التي تتضمن قراءة ملف مشروع QGIS وتحليله، تُنفَّذ مع كل طلب. أما مع spawn-fcgi فتبقى عملية QGIS Server حيّة بين الطلبات، مما ينتج عنه أداء أفضل بكثير. لهذا السبب يوصى باستخدام spawn-fcgi في بيئة الإنتاج.
spawn-fcgi¶
إذا أردت استخدام spawn-fcgi:
الخطوة الأولى هي تثبيت الحزمة:
apt install spawn-fcgi
ثم أدرج الكتلة التالية في إعدادات خادم NGINX:
location /qgisserver { gzip off; include fastcgi_params; fastcgi_pass unix:/var/run/qgisserver.socket; }
وأعد تشغيل NGINX ليؤخذ الإعداد الجديد في الحسبان:
systemctl restart nginx
أخيرًا، ونظرًا لعدم وجود ملف خدمة افتراضي لـ spawn-fcgi، عليك تشغيل QGIS Server يدويًا في الطرفية:
spawn-fcgi -s /var/run/qgisserver.socket \ -U www-data -G www-data -n \ /usr/lib/cgi-bin/qgis_mapserv.fcgi
أصبح QGIS Server متاحًا الآن على http://qgis.demo/qgisserver.
ملاحظة
عند استخدام spawn-fcgi، يمكنك تعريف متغيرات البيئة مباشرة قبل تشغيل الخادم. مثلًا: export QGIS_SERVER_LOG_STDERR=1
بالطبع يمكنك إضافة سكربت تهيئة لتشغيل QGIS Server عند الإقلاع أو متى شئت. مثلًا باستخدام systemd:
حرّر الملف
/etc/systemd/system/qgis-server.serviceبهذا المحتوى:[Unit] Description=QGIS server After=network.target [Service] ;; set env var as needed ;Environment="LANG=en_EN.UTF-8" ;Environment="QGIS_SERVER_PARALLEL_RENDERING=1" ;Environment="QGIS_SERVER_MAX_THREADS=12" ;Environment="QGIS_SERVER_LOG_LEVEL=0" ;Environment="QGIS_SERVER_LOG_STDERR=1" ;; or use a file: ;EnvironmentFile=/etc/qgis-server/env ExecStart=spawn-fcgi -s /var/run/qgisserver.socket -U www-data -G www-data -n /usr/lib/cgi-bin/qgis_mapserv.fcgi [Install] WantedBy=multi-user.target
ثم فعّل الخدمة وشغّلها:
systemctl enable --now qgis-server
تحذير
باستخدام الأوامر السابقة، لا يُنشئ spawn-fcgi إلا عملية QGIS Server واحدة.
fcgiwrap¶
إعداد fcgiwrap أسهل بكثير من spawn-fcgi لكنه أبطأ بكثير.
عليك أولًا تثبيت الحزمة المقابلة:
apt install fcgiwrap
ثم أدرج الكتلة التالية في إعدادات خادم NGINX:
1 location /qgisserver { 2 gzip off; 3 include fastcgi_params; 4 fastcgi_pass unix:/var/run/fcgiwrap.socket; 5 fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/qgis_mapserv.fcgi; 6 }
أخيرًا، أعد تشغيل NGINX و fcgiwrap ليؤخذ الإعداد الجديد في الحسبان:
systemctl restart nginx systemctl restart fcgiwrap
أصبح QGIS Server متاحًا الآن على http://qgis.demo/qgisserver.
Systemd¶
يحتاج QGIS Server إلى خادم X قيد التشغيل ليكون قابلًا للاستخدام بالكامل، ولا سيما للطباعة. وإذا كان لديك خادم X يعمل بالفعل، يمكنك استخدام خدمات systemd.
تعتمد هذه الطريقة لنشر QGIS Server على ضبط وحدتين من وحدات Systemd: وحدة مقبس (Socket unit) و وحدة خدمة (Service unit).
تعرّف وحدة مقبس QGIS Server مقبسًا في نظام الملفات وتنشئه، ويستخدمه NGINX لتشغيل QGIS Server والتواصل معه. ويجب ضبط وحدة المقبس على
Accept=false، أي أن استدعاءات نداء النظامaccept()تُفوَّض إلى العملية التي تنشئها وحدة الخدمة. وتقع في/etc/systemd/system/qgis-server@.socket، وهي في الواقع قالب:[Unit] Description=QGIS Server Listen Socket (instance %i) [Socket] Accept=false ListenStream=/var/run/qgis-server-%i.sock SocketUser=www-data SocketGroup=www-data SocketMode=0600 [Install] WantedBy=sockets.target
فعّل المقابس الآن وشغّلها:
for i in 1 2 3 4; do systemctl enable --now qgis-server@$i.socket; done
تعرّف وحدة خدمة QGIS Server عملية QGIS Server وتشغّلها. والجزء المهم هو أن الإدخال القياسي لعملية الخدمة متصل بالمقبس الذي تعرّفه وحدة المقبس. ويجب ضبط ذلك باستخدام
StandardInput=socketفي إعدادات وحدة الخدمة الموجودة في/etc/systemd/system/qgis-server@.service:[Unit] Description=QGIS Server Service (instance %i) [Service] User=www-data Group=www-data StandardOutput=null StandardError=journal StandardInput=socket ExecStart=/usr/lib/cgi-bin/qgis_mapserv.fcgi EnvironmentFile=/etc/qgis-server/env [Install] WantedBy=multi-user.target
ملاحظة
تُعرَّف متغيرات البيئة الخاصة بـ QGIS Server في ملف منفصل هو
/etc/qgis-server/env. وقد يبدو هكذا:QGIS_PROJECT_FILE=/etc/qgis/myproject.qgs QGIS_SERVER_LOG_STDERR=1 QGIS_SERVER_LOG_LEVEL=3
شغّل الآن خدمة المقبس:
for i in 1 2 3 4; do systemctl enable --now qgis-server@$i.service; done
أخيرًا، بالنسبة لخادم NGINX HTTP، لنُدرج الإعداد الخاص بهذا التجهيز:
upstream qgis-server_backend { server unix:/var/run/qgis-server-1.sock; server unix:/var/run/qgis-server-2.sock; server unix:/var/run/qgis-server-3.sock; server unix:/var/run/qgis-server-4.sock; } server { … location /qgis-server { gzip off; include fastcgi_params; fastcgi_pass qgis-server_backend; } }
أعد الآن تشغيل NGINX ليؤخذ الإعداد الجديد في الحسبان:
systemctl restart nginx
الشكر لشركة Oslandia على مشاركة درسها التعليمي.
2.1.3. Xvfb¶
يحتاج QGIS Server إلى خادم X قيد التشغيل ليكون قابلًا للاستخدام بالكامل، ولا سيما للطباعة. ويُوصى عادةً بعدم تثبيته على الخوادم، لذا يمكنك استخدام xvfb للحصول على بيئة X افتراضية.
إذا كنت تشغّل الخادم في بيئة رسومية/X11 فلا حاجة إلى تثبيت xvfb. مزيد من المعلومات على https://www.itopen.it/qgis-server-setup-notes/.
لتثبيت الحزمة:
apt install xvfb
أنشئ ملف الخدمة
/etc/systemd/system/xvfb.serviceبهذا المحتوى:[Unit] Description=X Virtual Frame Buffer Service After=network.target [Service] ExecStart=/usr/bin/Xvfb :99 -screen 0 1024x768x24 -ac +extension GLX +render -noreset [Install] WantedBy=multi-user.target
فعّل
xvfb.serviceوشغّلها وتحقق من حالتها:systemctl enable --now xvfb.service systemctl status xvfb.service
ثم، بحسب خادم HTTP لديك، عليك ضبط المعامل DISPLAY أو استخدام xvfb-run مباشرة.
باستخدام Apache:
أضف إلى إعدادات Fcgid (انظر خادم Apache HTTP):
FcgidInitialEnv DISPLAY ":99"
أعد تشغيل Apache ليؤخذ الإعداد الجديد في الحسبان:
systemctl restart apache2
باستخدام NGINX
مع spawn-fcgi باستخدام
xvfb-run:xvfb-run /usr/bin/spawn-fcgi -f /usr/lib/cgi-bin/qgis_mapserv.fcgi \ -s /tmp/qgisserver.socket \ -G www-data -U www-data -n
مع متغير البيئة DISPLAY في إعدادات خادم HTTP.
fastcgi_param DISPLAY ":99";
2.2. التثبيت على Windows¶
يمكن أيضًا تثبيت QGIS Server على أنظمة Windows باستخدام مثبّت الشبكة OSGeo4W (https://qgis.org/resources/installation-guide/#windows).
فيما يلي إجراء بسيط:
نزّل مثبّت OSGeo4W وشغّله
اتبع خيار "Advanced Install" وثبّت الحزم QGIS Desktop و QGIS Server و apache و mod_fcgid.
لا يُثبَّت Apache مباشرة خدمةً على Windows. لذا عليك:
انقر بزر الفأرة الأيمن على الملف
OSGeo4W.batفي جذر المجلدC:\OSGeo4W\(إذا استُخدمت مسارات التثبيت الافتراضية) واختر Run as administratorفي وحدة التحكم، شغّل
apache-install.bat، وسيُظهر> apache-install.bat Installing the 'Apache OSGeo4W Web Server' service The 'Apache OSGeo4W Web Server' service is successfully installed. Testing httpd.conf.... Errors reported here must be corrected before the service can be started. ...
تبدأ الخدمة كما تلاحظ في التقرير. لكن قد يفشل الخادم في العمل بسبب نقص الإعدادات المخصصة.
حرّر الملف
C:\OSGeo4w\apps\apache\conf\httpd.confبإجراء التغييرات التالية (تتوفر تركيبات أخرى متنوعة):جدول 2.1 تحديث إعدادات Apache¶ غرض
الإعداد الحالي
البديل
(اختياري) خصّص العنوان المراد الاستماع إليه باستخدام عنوان IP و/أو منفذ، ويمكنك إضافة ما تشاء من المدخلات.
Listen ${SRVPORT}
Listen localhost:8080
حدد مكان ملفات السكربتات
ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"
ScriptAlias /cgi-bin/ "C:/OSGeo4W/apps/qgis/bin/"
امنح الصلاحيات على مجلد السكربتات
<Directory "${SRVROOT}/cgi-bin"> AllowOverride None Options None Require all granted </Directory>
<Directory "C:/OSGeo4W/apps/qgis/bin"> SetHandler cgi-script AllowOverride None Options ExecCGI Require all granted </Directory>
فعّل امتدادات الملفات المستخدمة لملفات السكربتات. أزل علامة التعليق وأكمل
#AddHandler cgi-script .cgiAddHandler cgi-script .cgi .exe
أضف مزيدًا من متغيرات الإعداد المخصصة لـ OSGeo4W
# parse OSGeo4W apache conf files IncludeOptional "C:/OSGeo4W/httpd.d/httpd_*.conf"
# parse OSGeo4W apache conf files IncludeOptional "C:/OSGeo4W/httpd.d/httpd_*.conf" SetEnv GDAL_DATA "C:/OSGeo4W/share/gdal" SetEnv QGIS_AUTH_DB_DIR_PATH "C:/OSGeo4W/apps/qgis/resources" # default QGIS project SetEnv QGIS_PROJECT_FILE "C:/Users/*Your USERNAME*/qgis_projects/qgis-server-tutorial-data/world.qgs"
أعد تشغيل خادم الويب Apache
> apache-restart.bat
لنُضف مشروعًا تجريبيًا. يمكنك استخدام مشروعك الخاص، أو أحد مشاريع بيانات التدريب التجريبية. تأكد من وضعه في المجلد نفسه الذي يشير إليه متغير البيئة QGIS_PROJECT_FILE:
> "C:/Users/*Your USERNAME*/qgis_projects/qgis-server-tutorial-data/world.qgs"
افتح نافذة متصفح لاختبار طلب GetCapabilities إلى QGIS Server. استبدل
localhost:8080بعنوان IP والمنفذ اللذين ضبطتهما للاستماع.http://localhost:8080/cgi-bin/qgis_mapserv.fcgi.exe?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
يُفترض أن يُعاد ملف
XMLيحتوي على الإمكانات. خادمك جاهز للاستخدام.
2.3. تقديم مشروع¶
الآن بعد أن أصبح QGIS Server مثبتًا وقيد التشغيل، ما علينا إلا استخدامه.
من الواضح أننا نحتاج إلى مشروع QGIS للعمل عليه. وبالطبع يمكنك تخصيص مشروعك بالكامل بتعريف معلومات الاتصال، أو تحديد بعض القيود على CRS، أو حتى استبعاد بعض الطبقات. كل ما تحتاج معرفته حول ذلك موصوف لاحقًا في ضبط مشروعك.
لكننا الآن سنستخدم مشروعًا بسيطًا مضبوطًا مسبقًا وسبق تنزيله في /home/qgis/projects/world.qgs، كما وُصف أعلاه.
بفتح المشروع وإلقاء نظرة سريعة على الطبقات، نعرف أن 4 طبقات متاحة حاليًا:
airports
places
countries
countries_shapeburst
لست مضطرًا لفهم الطلب كاملًا الآن، لكن يمكنك جلب خريطة تضم بعض الطبقات السابقة بفضل QGIS Server، وذلك بكتابة شيء كهذا في متصفح الويب لجلب الطبقة countries:
إذا اتبعت التعليمات السابقة لتثبيت خادم Apache HTTP:
http://qgis.demo/cgi-bin/qgis_mapserv.fcgi?MAP=/home/qgis/projects/world.qgs&LAYERS=countries&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS=EPSG:4326&WIDTH=400&HEIGHT=200&BBOX=-90,-180,90,180
إذا اتبعت التعليمات السابقة لتثبيت خادم NGINX HTTP:
http://qgis.demo/qgisserver?MAP=/home/qgis/projects/world.qgs&LAYERS=countries&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS=EPSG:4326&WIDTH=400&HEIGHT=200&BBOX=-90,-180,90,180
إذا اتبعت التعليمات الخاصة بـ Windows:
http://localhost:8080/cgi-bin/qgis_mapserv.fcgi.exe?SERVICE=WMS&LAYERS=countries&VERSION=1.3.0&REQUEST=GetMap&CRS=EPSG:4326&WIDTH=400&HEIGHT=200&BBOX=-90,-180,90,180
إذا حصلت على الصورة التالية، فإن QGIS Server يعمل بشكل صحيح:
شكل 2.2 استجابة الخادم لطلب GetMap أساسي¶
لاحظ أنه يمكنك تعريف متغير البيئة QGIS_PROJECT_FILE لاستخدام مشروع افتراضيًا بدلًا من تمرير المعامل MAP (انظر متغيرات البيئة).
على سبيل المثال باستخدام spawn-fcgi:
export QGIS_PROJECT_FILE=/home/qgis/projects/world.qgs
spawn-fcgi -f /usr/lib/bin/cgi-bin/qgis_mapserv.fcgi \
-s /var/run/qgisserver.socket \
-U www-data -G www-data -n
2.4. ضبط مشروعك¶
لتقديم خدمة WMS أو WFS أو OAPIF أو WCS جديدة عبر QGIS Server، عليك إنشاء ملف مشروع QGIS يحتوي على بعض البيانات أو استخدام أحد مشاريعك الحالية. عرّف ألوان الطبقات وأنماطها في QGIS ونظام الإحداثيات المرجعي للمشروع إن لم يكن معرّفًا بعد. ثم انتقل إلى قائمة QGIS Server في نافذة الحوار وقدّم بعض المعلومات عن خدمة OWS في التبويب Service Capabilities.
شكل 2.3 التعريفات الخاصة بمشروع QGIS Server لخدمات WMS/WFS/WCS¶
عليك أولًا تفعيل Enable Service Capabilities إن كان معطّلًا. ستظهر هذه المعلومات في استجابة GetCapabilities لخدمات WMS أو WFS أو WCS. وإذا لم تحدد
Enable Service capabilities، فسيستخدم QGIS Server المعلومات الواردة في الملف wms_metadata.xml الموجود في المجلد cgi-bin.
2.4.1. إمكانات WMS¶
شكل 2.4 التعريفات في تبويب WMS¶
في التبويب WMS، يمكنك تعريف خيارات إمكانات WMS.
حدد Advertised extent لتعريف الامتداد المُعلَن في استجابة WMS GetCapabilities. يساعدك عنصر الواجهة محدِّد الامتداد المكاني على إدخال الامتداد نصًّا بالصيغة
xmin, xmax, ymin, ymaxأو اختياره من لوحة الخريطة أو الطبقات أو العلامات المرجعية...
بتحديد
CRS restrictions، يمكنك تقييد أنظمة الإحداثيات المرجعية (CRS) التي سيعرض QGIS Server رسم الخرائط بها. ويوصى بتقييد أنظمة CRS المعروضة لأن ذلك يقلل حجم استجابة WMS GetCapabilities. استخدم الزر
أدناه لاختيار تلك الأنظمة من محدِّد نظام الإحداثيات المرجعي، أو انقر على Used لإضافة أنظمة CRS المستخدمة في مشروع QGIS إلى القائمة.إذا كانت لديك تخطيطات طباعة معرّفة في مشروعك، فستُدرج في استجابة
GetProjectSettings، ويمكن استخدامها في طلب GetPrint لإنشاء مطبوعات باستخدام أحد تخطيطات الطباعة قالبًا. وهذا امتداد خاص بـ QGIS لمواصفات WMS 1.3.0. إذا أردت استبعاد أي تخطيط طباعة من النشر عبر WMS، فحدد
Exclude layouts وانقر على الزر
أدناه. ثم اختر تخطيط طباعة من نافذة الحوار Select print layout لإضافته إلى قائمة التخطيطات المستبعدة.إذا أردت استبعاد أي طبقة أو مجموعة طبقات من النشر عبر WMS، فحدد
Exclude Layers وانقر على الزر
أدناه. يفتح ذلك نافذة الحوار Select restricted layers and groups التي تتيح لك اختيار الطبقات والمجموعات التي لا تريد نشرها. استخدم المفتاح Shift أو Ctrl إذا أردت تحديد عدة مدخلات. ويوصى باستبعاد الطبقات التي لا تحتاجها من النشر لأن ذلك يقلل حجم استجابة WMS GetCapabilities، مما يؤدي إلى أوقات تحميل أسرع لدى العميل.Layer and Feature Options
يمكنك تلقي استجابة GetFeatureInfo المطلوبة نصًّا عاديًا أو بصيغة XML أو GML. والصيغة الافتراضية هي XML.
إذا حددت
Use layer ids as name، فستُستخدم معرّفات الطبقات للإشارة إلى الطبقات في استجابة GetCapabilitiesأو في المعاملGetMap LAYERS. وإلا فسيُستخدم اسم الطبقة أو اسمها المختصر إن كان معرّفًا (انظر خصائص QGIS Server).افتراضيًا، تُستخدم أسماء الطبقات لكشف الطبقات عبر WMS. وإذا كان لعدة طبقات الاسم نفسه، فستُدمج في طبقة WMS واحدة ولا يمكن طلبها منفردة. وعليك الحرص على أن تكون هذه الطبقات متوافقة فيما بينها. ويضمن استخدام الخيار Use layer ids as name إمكانية طلب الطبقات المتعددة ذات الاسم نفسه طبقاتٍ منفصلة.
يمكنك إن شئت تفعيل
Add geometry to feature response. سيؤدي ذلك إلى تضمين المستطيل المحيط بكل معلم في استجابة GetFeatureInfo. انظر أيضًا المعامل WITH_GEOMETRY.نظرًا لأن كثيرًا من عملاء الويب لا يستطيعون عرض الأقواس الدائرية في الأشكال الهندسية، يتوفر لك خيار تقسيم الشكل الهندسي إلى قطع مستقيمة قبل إرساله إلى العميل في استجابة GetFeatureInfo. يتيح ذلك لهؤلاء العملاء عرض الشكل الهندسي للمعلم (مثلًا لإبرازه). عليك تفعيل
Segmentize feature info geometry لتشغيل هذا الخيار.يمكنك أيضًا استخدام الخيار GetFeatureInfo geometry precision لضبط دقة الشكل الهندسي في GetFeatureInfo. يتيح لك هذا توفير عرض النطاق الترددي حين لا تحتاج إلى الدقة الكاملة.
إذا كانت إحدى طبقاتك تستخدم عرض تلميحات الخريطة (أي لعرض نص باستخدام التعبيرات) فسيُدرَج ذلك ضمن مخرجات GetFeatureInfo. وإذا كانت الطبقة تستخدم Value Map لإحدى سماتها، فستظهر هذه المعلومات أيضًا في مخرجات GetFeatureInfo.
إذا أردت أن يعلن QGIS Server عن عناوين URL محددة للطلبات في استجابة WMS GetCapabilities، فأدخل العنوان المناسب في الحقل Advertised URL.
Map and Legend Options
عند تمرير مجموعة طبقات إلى طلب
GetLegendGraphic، تُضاف جميع طبقاتها الطرفية إلى صورة مفتاح الخريطة (لكن دون تسميات المجموعات). فعّل الخيار
Add layer groups in GetLegendGraphic إذا أردت أيضًا إدراج أسماء مجموعات الطبقات (والمجموعات الفرعية) في شجرة الطبقات، تمامًا كما في مفتاح الخريطة في QGIS Desktop.عندما يحتوي مشروع QGIS على مجموعات طبقات، فإنها تُدرَج في مستند إمكانات WMS إلى جانب الطبقات. وإذا أُدرجت مجموعة (باسمها كما يظهر في الإمكانات) في المعامل
LAYERSلطلب WMS GetMap إلى جانب أسماء طبقات تلك المجموعة، فسيكرر QGIS الطبقات: مرة للمجموعة ومرة للطبقة المحددة. إذا فعّلت الخيار
Skip name attribute for groups، فلن يُرجع GetCapabilities سوى سمة العنوان للمجموعة دون سمة الاسم، مما يجعل إدراج المجموعات في قائمة طبقات طلب GetMap غير ممكن.علاوة على ذلك، يمكنك تقييد الحجم الأقصى للخرائط التي تُرجعها الطلبات بإدخال العرض والارتفاع الأقصيين في الحقول المعنية تحت Maximum image size for GetMap and GetLegendGraphic requests.
يمكنك تغيير معامل Quality for JPEG and WebP images. يجب أن تقع قيمة الجودة بين 0 و100. حدّد 0 لأقصى ضغط، و100 لعدم الضغط.
يمكنك تغيير الحد الأقصى لمعالم الأطلس التي تُطبع في طلب واحد بضبط الحقل Maximum features for Atlas print requests.
عند استخدام QGIS Server في وضع البلاطات (انظر المعامل TILED)، يمكنك ضبط Tile buffer in pixels. القيمة الموصى بها هي حجم أكبر رمز أو أكبر عرض خط في مشروع QGIS الخاص بك.
بحسب ما إذا كانت الخريطة تستخدم نظام إحداثيات مرجعيًا مُسقَطًا أو جغرافيًا، وفي حال عدم توفر معلومات لتقدير الرموز ذات الأحجام بوحدات الخريطة، يمكنك تقديم مرجع للحجم إما عبر Default scale for legend أو عبر Default map units per mm in legend.
2.4.2. إمكانات WMTS¶
في التبويب WMTS يمكنك تحديد الطبقات التي تريد نشرها بصيغة WMTS وتحديد ما إذا كنت تريد نشرها بصيغة PNG أو JPEG.
تحت Grids، ولكل نظام إحداثيات مرجعي مقيَّد، يمكنك تحديد ما إذا كان يجب نشر مصفوفات البلاطات، وضبط زاويتها العلوية اليسرى، والحدين الأدنى والأقصى لمقياس الرسم، والمستوى الأخير لمصفوفات البلاطات. لاحظ أنه بالنسبة لنظامي EPSG:3857 و EPSG:4326 لا يمكن تعديل سوى المستوى الأخير لمصفوفات البلاطات.
يمكنك أيضًا ضبط Minimum scale لعرض البلاطات.
إذا أدخلت عنوان URL في الحقل Advertised URL، فسيعلن QGIS Server عن هذا العنوان المحدد في استجابة WMTS GetCapabilities.
شكل 2.5 التعريفات في تبويب WMTS¶
2.4.3. إمكانات WFS/OAPIF¶
في التبويب WFS/OAPIF يمكنك تحديد الطبقات التي تريد نشرها بصيغة WFS أو OAPIF، وتحديد ما إذا كانت ستسمح بعمليات التحديث والإدراج والحذف.
شكل 2.6 التعريفات في تبويب WFS/OAPIF¶
إذا أدخلت عنوان URL في الحقل Advertised URL، فسيعلن QGIS Server عن هذا العنوان المحدد في استجابة WFS GetCapabilities.
2.4.4. إمكانات WCS¶
في التبويب WCS يمكنك تحديد الطبقات التي تريد نشرها بصيغة WCS.
إذا أدخلت عنوان URL في الحقل Advertised URL في القسم WCS capabilities، فسيعلن QGIS Server عن هذا العنوان المحدد في استجابة WCS GetCapabilities.
شكل 2.7 التعريفات في تبويب WCS¶
2.4.5. الضبط الدقيق لخدمات OWS¶
إلى جانب ضبط البيانات الوصفية (metadata) لكل طبقة على حدة، يمكنك في QGIS ضبط مجموعة طبقات WMS ضبطًا دقيقًا. يفيد هذا إذا أردت أن تظهر المجموعة ككيان واحد في WMS GetCapabilities بدلًا من عرض طبقاتها الفرعية فقط. وبضبط البيانات الوصفية على مستوى المجموعة، يمكنك تقديم وصف أوضح للطبقات المترابطة وتحسين سهولة استخدام خدمتك. لضبط البيانات الوصفية لمجموعة طبقات:
في اللوحة Layers، انقر بزر الفأرة الأيمن على مجموعة الطبقات المطلوبة واختر Set Group WMS Data.
في نافذة الحوار التي تُفتح، املأ المعلومات:
Description: ملخص مجموعة الطبقات.
Attribution: الإسناد (نسبة المصدر) لمجموعة الطبقات.
Metadata URL: عنوان URL لمستند البيانات الوصفية لمجموعة الطبقات.
Legend URL: عنوان URL لصورة مفتاح الخريطة لمجموعة الطبقات.
اختياريًا، يمكنك تفعيل
Compute TIME dimension from children ليحسب QGIS Server البعد الزمني TIME للمجموعة استنادًا إلى الأبعاد الزمنية لطبقاتها الفرعية.
بالنسبة للطبقات المتجهية، يتيح لك التبويب Fields في نافذة الحوار أن تحدد لكل سمة ما إذا كانت ستُنشر أم لا. افتراضيًا، تُنشر جميع السمات عبر WMS و WFS. إذا لم ترغب في نشر سمة معينة، فألغِ تفعيل مربع الاختيار المناسب في العمود Configuration:
Do not expose in WFS
Do not expose in WMS
يمكنك وضع علامات مائية فوق الخرائط التي تنتجها خدمة WMS بإضافة تعليقات توضيحية نصية أو تعليقات SVG إلى ملف المشروع. راجع القسم أدوات التعليق للاطلاع على تعليمات إنشاء التعليقات التوضيحية. لكي تُعرض التعليقات التوضيحية كعلامات مائية في مخرجات WMS، يجب إلغاء تفعيل مربع الاختيار Fixed map position في نافذة الحوار Annotation text. يمكن الوصول إليها بالنقر المزدوج على التعليق التوضيحي أثناء تفعيل إحدى أدوات التعليقات التوضيحية. أما بالنسبة لتعليقات SVG، فستحتاج إما إلى ضبط المشروع لحفظ المسارات المطلقة (في القائمة General من نافذة الحوار ) أو إلى تعديل مسار صورة SVG يدويًا بحيث يمثل مسارًا نسبيًا صالحًا.
2.5. التكامل مع الأطراف الثالثة¶
يوفر QGIS Server خدمات ويب قياسية من OGC مثل WMS و WFS وغيرها ولذلك يمكن استخدامه من قبل طيف واسع من أدوات المستخدم النهائي.
2.5.1. التكامل مع QGIS Desktop¶
QGIS Desktop هو مصمم الخرائط، بينما QGIS Server هو خادم الخرائط. تُقدَّم الخرائط أو مشاريع QGIS عبر QGIS Server لتوفير معايير OGC. يمكن أن تكون مشاريع QGIS هذه ملفات أو مُدخلات في قاعدة بيانات (باستخدام في QGIS Desktop).
علاوة على ذلك، يجب إنشاء سير عمل مخصص للتحديث من أجل تحديث المشروع الذي يستخدمه QGIS Server (أي نسخ ملفات المشروع إلى موقعها على الخادم وإعادة تشغيل QGIS Server). وحاليًا لم تُنفَّذ بعدُ عمليات مؤتمتة (مثل إعادة تحميل الخادم عبر خدمة طابور الرسائل).
2.5.2. التكامل مع MapProxy¶
MapProxy هو خادم تخزين مؤقت للبلاطات، وبما أنه يستطيع قراءة وتقديم أي خادم خرائط WMS/WMTS، فيمكن ربطه مباشرة بخدمات الويب في QGIS Server لتحسين تجربة المستخدم النهائي.
2.5.3. التكامل مع QWC2¶
QWC2 هو تطبيق ويب متجاوب مخصص لـ QGIS Server. يساعدك على بناء عارض خرائط عالي التخصيص مع تحديد الطبقات ومعلومات المعالم وغير ذلك. كما تتوفر إضافات كثيرة مثل المصادقة أو خدمة الطباعة، والقائمة الكاملة متاحة في هذا المستودع.