2. Come Iniziare

2.1. Installazione su sistemi Debian

Daremo un breve e semplice how-to di installazione per una configurazione minima funzionante su sistemi basati su Debian (incluso Ubuntu e derivati). Tuttavia, molte altre distribuzioni e sistemi operativi forniscono package per QGIS Server.

Nota

In Ubuntu puoi usare il tuo normale utente, aggiungendo sudo ai comandi che richiedono permessi di admin. In Debian puoi lavorare come admin (root), senza usare sudo.

I requisiti e i passaggi per aggiungere i repository ufficiali di QGIS per installare QGIS Server su un sistema basato su Debian sono forniti nella pagina QGIS installers. È preferibile che tu installi perlomeno l’ultima Long Term Release.

Una volta configurato il repository della versione di destinazione e installato QGIS Server, puoi testare l’installazione con:

/usr/lib/cgi-bin/qgis_mapserv.fcgi

Se ottieni il seguente risultato, il server è stato installato correttamente.

Nota

A seconda della versione di QGIS, potresti vedere un output leggermente diverso quando si esegue 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>

Nota

Come riportato di seguito, QGIS segnala un codice di stato 400, che identifica correttamente che la richiesta è fallita perché non c’è una sessione http attiva. Questo non è un bug e indica che il server funziona correttamente.

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"}]

Aggiungiamo un progetto di esempio. Puoi usare il tuo o uno di Training demo data:

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 .

Naturalmente, puoi utilizzare il tuo software GIS preferito per aprire questo file e dare un’occhiata alla configurazione e ai layer disponibili.

Per implementare correttamente il server QGIS è necessario un server HTTP. Le scelte consigliate sono Apache o NGINX.

2.1.1. Apache HTTP Server

Nota

Quindi, sostituisci qgis.demo con il nome o l’indirizzo IP del tuo server.

  1. Installa Apache e mod_fcgid:

    apt install apache2 libapache2-mod-fcgid
    
  2. Puoi eseguire QGIS Server sul sito web predefinito, ma configuriamo un virtualhost appositamente per questo, come segue.

    1. Nella cartella /etc/apache2/sites-available, crea un file chiamato qgis.demo.conf, con questo contenuto:

      <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>
      

      Nota

      Alcune delle opzioni di configurazione di cui sopra sono spiegate nelle sezioni Server environment variables e pg_service file.

    2. Creiamo ora le cartelle che ospiteranno i registri di QGIS Server e il database di autenticazione:

      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
      

      Nota

      www-data è l’utente di Apache sui sistemi basati su Debian e abbiamo bisogno che Apache abbia accesso a queste cartelle o file. I comandi chown www-data... cambiano il proprietario delle rispettive cartelle e file in www-data.

  3. Ora possiamo abilitare l’host virtuale e il mod ``fcgid””, se non è già stato fatto:

    a2enmod fcgid
    a2ensite qgis.demo
    
  4. Ora riavvia Apache per usare la nuova configurazione:

    systemctl restart apache2
    
  5. Ora che Apache sa che deve rispondere alle richieste di http://qgis.demo, dobbiamo anche configurare il sistema client in modo che sappia chi è qgis.demo. Per farlo, aggiungiamo 127.0.0.1 qgis.demo nel file hosts.

    # Replace 127.0.0.1 with the IP of your server.
    sh -c "echo '127.0.0.1 qgis.demo' >> /etc/hosts"
    

Importante

Ricorda che entrambi i file qgis.demo.conf e /etc/hosts devono essere configurati affinché la configurazione funzioni. Puoi anche testare l’accesso al server QGIS da altri client in rete (ad esempio macchine Windows o Macos) andando nel file /etc/hosts e puntando il nome qgis.demo a qualsiasi IP della macchina server sulla rete (non 127.0.0.1 perché è l’IP locale, accessibile solo dalla macchina locale). Sui computer *nix il file hosts si trova in /etc, mentre su Windows si trova nella cartella C:\Windows\System32\drivers\etc. In Windows è necessario avviare l’editor di testo con privilegi di amministratore prima di aprire il file hosts.

QGIS Server è ora disponibile all’indirizzo http://qgis.demo. Per verificare, è sufficiente scrivere in un browser, come nel seguente caso semplice:

http://qgis.demo/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities

2.1.2. NGINX HTTP Server

Nota

Quindi, sostituisci qgis.demo con il nome o l’indirizzo IP del tuo server.

Puoi utilizzare QGIS Server anche con NGINX. A differenza di Apache, NGINX non avvia automaticamente i processi FastCGI. I processi FastCGI devono essere avviati da qualcos’altro.

Installa NGINX:

apt install nginx
  • Come prima opzione, puoi usare spawn-fcgi o fcgiwrap per avviare e gestire i processi del server QGIS. Per entrambi esistono pacchetti ufficiali Debian. Quando non hai un server X in esecuzione e hai bisogno, per esempio, di stampare, puoi usare xvfb.

  • Un’altra opzione è quella di affidarsi a Systemd, il sistema di init per GNU/Linux che la maggior parte delle distribuzioni Linux utilizza oggi. Uno dei vantaggi di questo metodo è che non richiede altri componenti o processi. È pensato per essere semplice, ma robusto ed efficiente per le distribuzioni di produzione.

Configurazione NGINX

Il include fastcgi_params; usato nella configurazione precedente è importante, perché aggiunge i parametri da /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;

Inoltre, puoi utilizzare alcune Variabili d’ambiente per configurare QGIS Server. Nel file di configurazione di NGINX, /etc/nginx/nginx.conf, devi usare l’istruzione fastcgi_param per definire queste variabili, come mostrato di seguito:

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;
 }

Wrapper FastCGI

Avvertimento

fcgiwrap è più facile da configurare di spawn-fcgi, perché è già confezionato in un servizio Systemd. Ma porta anche a una soluzione molto più lenta rispetto all’uso di spawn-fcgi. Con fcgiwrap, viene creato un nuovo processo del server QGIS a ogni richiesta, il che significa che il processo di inizializzazione del server QGIS, che include la lettura e l’analisi del file di progetto QGIS, viene eseguito a ogni richiesta. Con spawn-fcgi, il processo QGIS Server rimane in vita tra una richiesta e l’altra, con conseguenti migliori prestazioni. Per questo motivo, spawn-fcgi è consigliato per l’uso in produzione.

spawn-fcgi

Se vuoi utilizzare spawn-fcgi:

  1. Il primo passo è installare il package:

    apt install spawn-fcgi
    
  2. Quindi, inserisci il seguente blocco nella configurazione del server NGINX:

    location /qgisserver {
        gzip           off;
        include        fastcgi_params;
        fastcgi_pass   unix:/var/run/qgisserver.socket;
    }
    
  3. E riavvia NGINX per tenere conto della nuova configurazione:

    systemctl restart nginx
    
  4. Infine, dato che non esiste un file di servizio predefinito per spawn-fcgi, devi avviare manualmente QGIS Server nel terminale:

    spawn-fcgi -s /var/run/qgisserver.socket \
                    -U www-data -G www-data -n \
                    /usr/lib/cgi-bin/qgis_mapserv.fcgi
    

QGIS Server è ora disponibile su http://qgis.demo/qgisserver.

Nota

Quando si usa spawn-fcgi, puoi definire direttamente le variabili d’ambiente prima di eseguire il server. Per esempio: export QGIS_SERVER_LOG_STDERR=1

Naturalmente, puoi aggiungere uno script di init per avviare QGIS Server all’avvio o quando vuoi. Ad esempio con systemd:

  1. Modifica il file /etc/systemd/system/qgis-server.service con questo contenuto:

    [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
    
  2. Quindi attiva e avvia il servizio:

    systemctl enable --now qgis-server
    

Avvertimento

Con i comandi precedenti, spawn-fcgi genera un solo processo di QGIS Server.

fcgiwrap

L’utilizzo di fcgiwrap è molto più semplice da configurare rispetto a spawn-fcgi, ma è molto più lento.

  1. Devi per prima cosa installare il package corrispondente:

    apt install fcgiwrap
    
  2. Quindi, inserisci il seguente blocco nella configurazione del server 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 }
    
  3. Infine, riavvia NGINX e fcgiwrap per tenere conto della nuova configurazione:

    systemctl restart nginx
    systemctl restart fcgiwrap
    

QGIS Server è ora disponibile su http://qgis.demo/qgisserver.

Systemd

QGIS Server ha bisogno di un X Server funzionante per essere pienamente utilizzabile, in particolare per la stampa. Nel caso in cui si disponga già di un server X funzionante, puoi utilizzare i servizi systemd.

Questo metodo, per implementare QGIS Server, si basa su due unità Systemd da configurare: un’unità Socket e un’unità Service.

  1. L’unità QGIS Server Socket definisce e crea un socket del file system, utilizzato da NGINX per avviare e comunicare con QGIS Server. L’unità Socket deve essere configurata con Accept=false, il che significa che le richieste alla chiamata di sistema accept() sono delegate al processo creato dall’unità Service. Si trova in /etc/systemd/system/qgis-server@.socket, che in realtà è un modello:

    [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
    
  2. Ora abilita e avvia i socket:

    for i in 1 2 3 4; do systemctl enable --now qgis-server@$i.socket; done
    
  3. L’unità QGIS Server Service definisce e avvia il processo QGIS Server. La parte importante è che l’input standard del processo Service sia collegato al socket definito dall’unità Socket. Questo deve essere configurato usando StandardInput=socket nella configurazione dell’unità Service situata in /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
    

    Nota

    Le environment variables di QGIS Server sono definite in un file separato, /etc/qgis-server/env. Potrebbe apparire come segue:

    QGIS_PROJECT_FILE=/etc/qgis/myproject.qgs
    QGIS_SERVER_LOG_STDERR=1
    QGIS_SERVER_LOG_LEVEL=3
    
  4. Avvia ora il servizio socket:

    for i in 1 2 3 4; do systemctl enable --now qgis-server@$i.service; done
    
  5. Infine, per il server HTTP NGINX, introduciamo la configurazione per questa impostazione:

    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;
       }
    }
    
  6. Ora riavvia NGINX per tenere conto della nuova configurazione:

    systemctl restart nginx
    

Grazie a Oslandia per aver condiviso their tutorial.

2.1.3. Xvfb

QGIS Server ha bisogno di un server X funzionante per essere pienamente utilizzabile, in particolare per la stampa. Sui server di solito si raccomanda di non installarlo, quindi si può usare xvfb per avere un ambiente X virtuale.

Se stai eseguendo il server in ambiente grafico/X11, non è necessario installare xvfb. Maggiori informazioni su https://www.itopen.it/qgis-server-setup-notes/.

  1. Per installare il package:

    apt install xvfb
    
  2. Crea il file di servizio, /etc/systemd/system/xvfb.service, con questo contenuto:

    [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
    
  3. Abilita, avvia e verifica lo stato di xvfb.service:

    systemctl enable --now xvfb.service
    systemctl status xvfb.service
    
  4. Quindi, a seconda del server HTTP, devi configurare il parametro DISPLAY o usare direttamente xvfb-run.

    • Utilizzandio Apache:

      1. Aggiungi alla tua configurazione Fcgid (vedi Apache HTTP Server):

        FcgidInitialEnv DISPLAY       ":99"
        
      2. Riavvia Apache affinché la nuova configurazione venga presa in carico:

        systemctl restart apache2
        
    • Utilizzando NGINX

      • Con spawn-fcgi usando 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
        
      • Con la variabile d’ambiente DISPLAY nella configurazione del server HTTP.

        fastcgi_param  DISPLAY       ":99";
        

2.2. Installazione su Windows

QGIS Server può essere installato anche su sistemi Windows utilizzando la versione a 64 bit dell’installatore di rete OSGeo4W (https://qgis.org/en/site/forusers/download.html).

Una procedura semplice è la seguente:

  1. Scarica ed esegui il programma di installazione di OSGeo4W

  2. Procedi con «Installazione avanzata» e installa i pacchetti QGIS Desktop, QGIS Server apache e mod_fcgid.

    ../../_images/qgis_server_windows2.png
  3. Apache non viene installato direttamente come servizio su Windows. Devi:

    1. Fare clic con il tasto destro del mouse sul file OSGeo4W.bat alla radice della cartella C:OSGeo4W64` (se sono stati utilizzati i percorsi di installazione predefiniti) e selezionare :guilabel:`Esegui come amministratore.

    2. Nella console, esegui apache-install.bat, che produrrà il seguente risultato

      > 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.
      ...
      

      Il servizio è avviato, come puoi notare nel report. Ma il server potrebbe non funzionare a causa di una configurazione personalizzata mancante.

  4. Modifica il file C:\OSGeo4w64appsapacheconfhttpd.conf con le seguenti variazioni (sono possibili altre combinazioni):

    Obiettivo

    Configurazione esistente

    Sostituzione

    (Opzionale) Personalizzare l’indirizzo di ascolto utilizzando un IP e/o una porta. Puoi aggiungere tutte le voci che vuoi.

    Listen ${SRVPORT}
    
    Listen localhost:8080
    

    Indica dove trovare i file di script

    ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"
    
    ScriptAlias /cgi-bin/ "C:/OSGeo4W64/apps/qgis/bin/"
    

    Fornisci le autorizzazioni alla cartella degli script

    <Directory "${SRVROOT}/cgi-bin">
        AllowOverride None
        Options None
        Require all granted
    </Directory>
    
    <Directory "C:/OSGeo4W64/apps/qgis/bin">
        SetHandler cgi-script
        AllowOverride None
        Options ExecCGI
        Require all granted
    </Directory>
    

    Abilita le estensioni dei file da utilizzare per i file di script. Deseleziona e completa

    #AddHandler cgi-script .cgi
    
    AddHandler cgi-script .cgi .exe
    

    Aggiungi altre variabili di configurazione personalizzate di OSGeo4W

    # parse OSGeo4W apache conf files
    IncludeOptional "C:/OSGeo4W64/httpd.d/httpd_*.conf"
    
    # parse OSGeo4W apache conf files
    IncludeOptional "C:/OSGeo4W64/httpd.d/httpd_*.conf"
    SetEnv GDAL_DATA "C:/OSGeo4W64/share/gdal"
    SetEnv QGIS_AUTH_DB_DIR_PATH "C:/OSGeo4W64/apps/qgis/resources"
    
  5. Riavvia il server web Apache

    > apache-restart.bat
    
  6. Apri la finestra del browser per testare una richiesta GetCapabilities al server QGIS. Sostituisci localhost:8080 con l’IP e la porta impostati per l’ascolto.

    http://localhost:8080/cgi-bin/qgis_mapserv.fcgi.exe?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
    

    Dovrebbe essere restituito un file XML con le capabilities. Il tuo server è pronto per l’uso.

2.3. Servire un progetto

Ora che QGIS Server è installato e funzionante, non resta che utilizzarlo.

Ovviamente, abbiamo bisogno di un progetto QGIS su cui lavorare. Naturalmente, puoi personalizzare completamente il progetto, definendo le informazioni di contatto, specificando alcune restrizioni sul SR o addirittura escludendo alcuni layer. Tutto quello che c’è da sapere a questo proposito è descritto più avanti in Configura il tuo progetto.

Ma per ora useremo un semplice progetto già configurato e precedentemente scaricato in /home/qgis/projects/world.qgs, come descritto sopra.

Aprendo il progetto e dando una rapida occhiata ai layer, sappiamo che al momento sono disponibili 4 layer:

  • airports

  • places

  • countries

  • countries_shapeburst

Non è necessario che tu capisca la richiesta completa per ora, ma puoi recuperare una mappa con alcuni dei layer precedenti grazie a QGIS Server facendo qualcosa come questo nel tuo browser web per recuperare il layer countries:

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

Se ottieni l’immagine seguente, QGIS Server funziona correttamente:

../../_images/server_basic_getmap.png

Fig. 2.1 Risposta del server a una richiesta GetMap di base

Nota che puoi definire la variabile d’ambiente QGIS_PROJECT_FILE per utilizzare un progetto per impostazione predefinita, invece di fornire un parametro MAP (vedi Variabili d’ambiente).

Per esempio con 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. Configura il tuo progetto

Per realizzare un nuovo QGIS Server WMS, WFS o WCS, devi creare un file di progetto QGIS con alcuni dati o utilizzare uno dei progetti esistenti. Definire i colori e gli stili dei layer in QGIS e il SR del progetto, se non già definiti.

../../_images/ows_server_definition.png

Fig. 2.2 Definizioni per un progetto QGIS Server WMS/WFS/WCS

Quindi, vai al menu QGIS Server della finestra di dialogo Progetto ► Proprietà… e fornire alcune informazioni sull’OWS nei campi sotto Service Capabilities. Queste informazioni appariranno nella risposta GetCapabilities di WMS, WFS o WCS. Se non selezioni la casella di controllo Service capabilities, QGIS Server utilizzerà le informazioni fornite nel file wms_metadata.xml situato nella cartella cgi-bin.

2.4.1. WMS capabilities

Nella sezione WMS capabilities, puoi definire l’estensione pubblicata nella risposta di WMS GetCapabilities inserendo i valori X e Y minimi e massimi nei campi sotto Advertised extent. Facendo clic su Usa estensione mappa corrente si impostano questi valori sull’estensione attualmente visualizzata nella area mappa QGIS. Selezionando la casella di controllo Restrizioni SR, puoi limitare i sistemi di riferimento delle coordinate (SR) offerti da QGIS Server per la visualizzazione delle mappe. Si consiglia di limitare i SR offerti per ridurre le dimensioni della risposta di WMS GetCapabilities. Usa il pulsante |simbologyAdd| qui sotto per selezionare i SR dal selettore del sistema di riferimento di coordinate, oppure fai clic su Used per aggiungere all’elenco i SR usati nel progetto QGIS.

Se nel progetto hai definito dei layout di stampa, questi saranno elencati nella risposta GetProjectSettings e potranno essere usati dalla richiesta GetPrint per creare delle stampe, usando uno dei layout di stampa come modello. Questa è un’estensione specifica di QGIS alla specifica WMS 1.3.0. Se vuoi escludere un layout di stampa dalla pubblicazione da parte del WMS, seleziona la casella di controllo Escludi layout e fai clic sul pulsante |simbologyAdd| sottostante. Quindi, seleziona un layout di stampa dalla finestra di dialogo Seleziona layout di stampa per aggiungerlo all’elenco dei layout esclusi.

Se vuoi escludere un layer o un gruppo di layer dalla pubblicazione da parte del WMS, seleziona la casella di controllo Escludi layer e fai clic sul pulsante |simbologyAdd| sottostante. Si apre la finestra di dialogo Selezione di layer e gruppi limitati, che consente di scegliere i layer e i gruppi che non vuoi vengano pubblicati. Usa i tasti Shift o Ctrl se si vuoi selezionare più voci. Si consiglia di escludere dalla pubblicazione i layer non necessari, in quanto ciò riduce le dimensioni della risposta di WMS GetCapabilities, con conseguenti tempi di caricamento più rapidi sul lato client.

Se selezioni checkbox Use layer ids as name, gli id dei layer saranno usati per fare riferimento ai layer nella risposta GetCapabilities o nel parametro GetMap LAYERS. In caso contrario, viene utilizzato il nome del layer o il nome breve, se definito (vedi Proprietà Server QGIS).

Puoi ricevere le GetFeatureInfo richieste come testo semplice, XML e GML. L’impostazione predefinita è XML.

Se vuoi, puoi selezionare checkbox Add geometry to feature response. Questo includerà il riquadro di delimitazione per ogni elemento nella risposta di GetFeatureInfo. Vedi anche il parametro WITH_GEOMETRY.

Poiché molti client web non possono visualizzare gli archi circolari nelle geometrie, puoi segmentare la geometria prima di inviarla al client in una risposta GetFeatureInfo. Ciò consente a tali client di visualizzare comunque la geometria di un elemento (ad esempio per evidenziare l’elemento). È necessario selezionare la casella di controllo Segmentize feature info geometry per attivare l’opzione.

Puoi anche usare l’opzione GetFeatureInfo geometry precision per impostare la precisione della geometria GetFeatureInfo. Ciò ti consente di risparmiare larghezza di banda quando non è necessaria la massima precisione.

Se vuoi che QGIS Server pubblicizzi URL di richiesta specifici nella risposta di WMS GetCapabilities, inserisci l’URL corrispondente nel campo Advertised URL.

Inoltre, puoi limitare la dimensione massima delle mappe restituite dalla richiesta GetMap inserendo la larghezza e l’altezza massime nei rispettivi campi sotto Maximums for GetMap request.

Puoi modificare il fattore Quality for JPEG images. Il fattore di qualità deve essere compreso nell’intervallo 0-100. Specifica 0 per la massima compressione, 100 per nessuna compressione.

Puoi modificare il limite di elementi dell’atlante da stampare in una richiesta impostando il campo Maximum features for Atlas print requests.

Quando QGIS Server viene utilizzato in modalità a tasselli (vedi il parametro TILED), puoi impostare il parametro Tile buffer in pixel. Il valore consigliato è la dimensione del simbolo o della linea più grande del progetto QGIS.

Se uno dei tuoi layer usa la Map Tip display (cioè per mostrare il testo usando le espressioni), questo verrà elencato nell’output di GetFeatureInfo. Se il layer utilizza una Mappa dei valori per uno dei suoi attributi, anche questa informazione verrà mostrata nell’output di GetFeatureInfo.

2.4.2. WFS capabilities

Nell’area WFS capabilities puoi selezionare i layer che vuoi pubblicare come WFS e specificare se consentiranno operazioni di aggiornamento, inserimento e cancellazione. Se inserisci un URL nel campo Advertised URL della sezione WFS capabilities, QGIS Server pubblicizzerà questo URL specifico nella risposta WFS GetCapabilities.

2.4.3. WCS capabilities

Nell’area WCS capabilities, puoi selezionare i livelli che vuoi pubblicare come WCS. Se inserisci un URL nel campo Advertised URL della sezione WCS capabilities, QGIS Server pubblicizzerà questo URL specifico nella risposta WCS GetCapabilities.

2.4.4. Messa a punto del tuo OWS

Per i layer vettoriali, il menu Campi della finestra di dialogo Layer ► Proprietà del layer consente di definire per ogni attributo se sarà pubblicato o meno. Per impostazione predefinita, tutti gli attributi sono pubblicati da WMS e WFS. Se non si desidera pubblicare un attributo specifico, deselezionare la casella di controllo corrispondente nella colonna WMS o WFS.

Puoi sovrapporre watermarks alle mappe prodotte dal WMS aggiungendo annotazioni di testo o SVG al file di progetto. Per istruzioni sulla creazione di annotazioni, vedere la sezione Note testuali. Affinché le annotazioni vengano visualizzate come watermarks nell’output del WMS, la casella di controllo Posizione fissa mappa nella finestra di dialogo Testo dell’annotazione deve essere deselezionata. Si può accedere a questa casella facendo doppio clic sull’annotazione mentre è attivo uno degli strumenti di annotazione. Per le annotazioni SVG, è necessario impostare il progetto in modo che salvi percorsi assoluti (nel menu Generale della finestra di dialogo Progetto ► Proprietà…) o modificare manualmente il percorso dell’immagine SVG in modo che rappresenti un percorso relativo valido.

2.5. Integrazione con terze parti

QGIS Server fornisce servizi web standard OGC come WMS, WFS, etc. e può quindi essere utilizzato da un’ampia gamma di strumenti per l’utente finale.

2.5.1. Integrazione con QGIS Desktop

QGIS Desktop è il designer di mappe e QGIS Server è il server di mappe. Le mappe o i progetti QGIS saranno serviti da QGIS Server per fornire gli standard OGC. Questi progetti QGIS possono essere file o voci di un database (utilizzando :menuselection: Progetto –> Salva in –> PostgreSQL in QGIS Desktop).

Inoltre, è necessario stabilire un flusso di lavoro di aggiornamento dedicato per aggiornare un progetto utilizzato da un server QGIS (cioè copiare i file del progetto nella posizione del server e riavviare il server QGIS). Per il momento, i processi automatizzati (come il ricaricamento del server tramite il servizio di coda di messaggi) non sono ancora stati implementati.

2.5.2. Integrazione con MapProxy

MapProxy è un server di cache di tasselli e, poiché può leggere e servire qualsiasi server di mappe WMS/WMTS, può essere collegato direttamente ai servizi web del server QGIS e migliorare l’esperienza dell’utente finale.

2.5.3. Integrazione con QWC2

QWC2 è un’applicazione web reattiva dedicata a QGIS Server. Aiuta a costruire un visualizzatore di mappe altamente personalizzato con selezione dei layer, informazioni su elementi, ecc. Sono disponibili anche molti plugin, come il servizio di autenticazione o di stampa; l’elenco completo è disponibile in questo repository.