QGIS server

QGIS server: come funziona e come si installa

Nel panorama dei GIS open-source, QGIS versione desktop rappresenta oramai uno dei software più conosciuti ed usati nel mondo, ma non si può dire la stessa cosa per il suo fratello minore: QGIS server.
Non è raro che utenti di QGIS anche abbastanza rodati, quando si presenti l’esigenza di pubblicare sul web le loro mappe, di fronte al dilemma su quale soluzione scegliere, non sappiano neanche dell’esistenza della versione server!

Ovviamente non è detto che se si usa QGIS (scritto da solo, nel seguito sottintenderò sempre la versione desktop), sia poi obbligatorio usare QGIS server per esporre mappe e geodati sul web; ci possono essere tanti ragionevoli motivi per usare altri sistemi. Ma non c’è dubbio che, vista la stretta correlazione esistente tra di essi, in genere questa è la scelta migliore per ottenere soluzioni  rapide e vantaggiose. Come vedremo, basta prendere un progetto realizzato con QGIS (file *.qgs), spostarlo nella cartella di QGIS server ed esso sarà già disponibile come webmap tramite WMS.

Semmai la questione è un altra: QGIS server è solo un map-server e come tale distribuisce dati geografici sulla rete (usando i protocolli OGC); sarai poi necessario un client  che permetta all’utente di riceverli, visualizzarli ed interrogarli. Ma tornerò a parlare di questo argomento prossimamente in un altro articolo, per adesso vediamo quali sono le sue caratteristiche fondamentali.

QGIS OWS server

Le caratteristiche principali

QGIS server funziona come modulo CGI/Fast CGI (… assomiglia a MapServer) e quindi richiede che nel sistema sia installato anche un web server, tipicamente Apache. Si appoggia alle stesse librerie di QGIS ed usando il medesimo file di progetto, pubblica come servizio WMS i layer, riproponendo esattamente lo stesso aspetto grafico (visibile nel desktop) e rendendo disponibili anche i layout di stampa eventualmente associati al progetto.

Detto in altre parole, QGIS server non ha un sua interfaccia utente,  ma usa QGIS come back-end per predisporre i layer ed i progetti da pubblicare sul web; è evidente quindi il grande vantaggio di poter usufruire della versatilità e  semplicità dell’applicazione desktop per realizzare una cartografia avanzata per servizi webGIS.

Si pensi per esempio, quanto è molto più complesso definire l’aspetto grafico delle mappe per MapServer, tramite la definizione del mapfile!

QGIS server è un cosiddetto server OWS (OGC Web Server) e come tale implementa gli standard OGC e precisamente:

  • WMS (Web Map Service) 1.1.0  e 1.3.0
  • WFS  (Web Feature Service) 1.0.0 e Transactional WFS (T-WFS) 1.0.0
  • WCS (Web Coverage Service) 1.1.1
  • SLD (Styled Descriptor Layer) 1.0.0  1.1.0

Essendo supportato anche il formato SLD, il rendering della webmap WMS, oltre che in base alle impostazioni di stile presenti in un file di progetto (*.qgs), può realizzarsi anche tramite un file di stile SLD esterno.

Altro aspetto da evidenziare  è la possibilità di stampare le mappe WMS (come immagine o come PDF) usando gli stessi template definiti col print-composer su QGIS. Il suo servizio  WMS  prevede infatti una richiesta GetPrint (proprietaria) che consente a un client di stampare la mappa richiamando tali modelli di stampa.

La stretta simbiosi esistente tra QGIS e la sua versione server però non deve trarre in inganno circa la sua installazione. Diversi pensano infatti che installando QGIS, si installa automaticamente anche QGIS server: non è così! QGIS server richiede la presenza di QGIS, ma va installato a parte.

Vediamo allora come si installa sia su sistemi Debian/Ubuntu che su Windows, ricordando che per poter funzionare è richiesto che sia presente anche il web server Apache. Anzi  vedremo come bisogna configurare Apache, per consentire il funzionamento del modulo FastCGI  di QGIS Server.

Installazione su Debian/Ubuntu

Innanzitutto bisogna verificare se nel vostro sistema è già configurato un repository (cioè è presente nel file /etc/apt/sources.list) con un PPA che contiene QGIS server. Se avete già installato QGIS certamente si, perchè nello stesso package vengono distribuiti insieme QGIS e QGIS server. Eventualmente, per una maggiore certezza, potete verificare con Synaptic Package Manager oppure da terminale con il comando:

che tra l’altro vi dice anche che versione di QGIS server è disponibile.

In caso negativo, dovete cercare ed aggiungere un repository che contenga QGIS, adatto per la vostra versione di Debian/Ubuntu. Per fare questo potete seguire le stesse indicazioni per installare QGIS che trovate nella guida ufficiale: installazione di QGIS. Qui come esempio, vi riporto il caso di Ubuntu 16.04 (xenial) scegliendo il repository “debian”:

1) nel file /etc/apt/source.list aggiungete le seguenti righe del repository

2) aggiornate l’ elenco dei pacchetti (PPA) disponibili

se vi dovesse comparire un errore di keyserver, seguite le indicazioni che trovate sempre nella guida ufficiale indicata prima, per aggiungere la public key del repository. Quindi ripetete l’ apt-get update.

3) se ancora non l’avete fatto installate QGIS desktop e il suo modulo Python

4) quindi installate QGIS server ed il modulo fastCGI per Apache

Tenete conto che il modulo mod-fcgid è una variante del modulo mod-fastcgi; pur implementando entrambi il fastCGI, si configurano e funzionano in modo differente.

Ora dobbiamo abilitare il modulo FastCGI digitando nel terminale i seguenti comandi:

quindi riavviamo il web server Apache:

Volendo, essere certi che il modulo fastCGI sia stato abilitato correttamente, possiamo controllare che nella cartella /etc/apache2/mods-available/ ci siano i files: fcgid.conf e fcgid.load.

Ok, non ci resta che verificare se QGIS server funziona e per farlo possiamo inviare una richiesta GetCapabilities WMS, scrivendo nel browser il seguente URL:

se tutto funziona correttamente otterremo la risposta con le Capabilities del server WMS :

WMS GetCapabilities

Se invece otteniamo un  messaggio di “Not Found” come il seguente:

not_found

vuol dire che il web server non sa dove si trovano i programmi CGI. In tal caso,  dobbiamo aggiornare il file .conf di Apache ovvero il file /etc/apache2/sites-available/000-default.conf,  aggiungendo all’interno di <Virtualhost *:80> le seguenti righe:

e quindi riavviare il server Apache.

 Installazione su Windows

Per installare QGIS server su Windows bisogna usare l’utility OSGeo4W; sul sul suo sito web trac.osgeo.org/osgeo4w trovate le versioni dell’ installer  per il vostro sistema: 32 o 64 bit). Per questo motivo, è preferibile che anche QGIS sia installato usando OSgeo4W; così siamo certi che i due software (desktop e server) abbiano la stessa versione, condividano le stesse cartelle e riescano ad interagire correttamente. Ricordiamo, come già detto, che QGIS server usa le stesse librerie di QGIS.

Aprendo una breve parentesi in proposito, per installare QGIS su Windows, abbiamo appunto due possibilità:

  1. usando l’installer stand-alone (il più diffuso)
  2. usando OSGeo4W

Si tratta di due installazioni con caratteristiche differenti  anche se poi il funzionamento del software GIS è identico. Sono diverse le directory in cui esso viene registrato e come viene configurato sul sistema. In particolare usando OSGeo4W, tutto ciò che viene installato (programmi, librerie, documenti, utility. … etc) viene salvato in una cartella che si chiama appunto OSGeo4W (per es: C:\OSGeo4W) e i programmi non risultano installati singolarmente (non li trovate tra i programmi installati di Windows).

Detto questo, supponendo che QGIS sia già installato (se no, lo installiamo contemporaneamente a QGIS server), per installare QGIS server, avviate il setup di OSGeo4W e scegliete la modalità Advanced Install :

OSGeo4W advance install

quindi andate avanti (salto i passaggi intermedi che sono scontati) fino ad arrivare alla scelta dei pacchetti da installare. In pratica per ognuno avete tre possibilità:

  • installare o aggiornare alla versione più recente (n° versione);
  • mantenere una versione già installata (Keep);
  • non installare (Skip).

Selezionate il gruppo pacchetti “Web” e qui trovate la voce QGIS server con la versione disponibile:OSGeo4W web packages

selezionatela ed andate avanti per completare l’installazione. Se eventualmente dovete installare anche QGIS, lo trovate sotto il gruppo pacchetti “Desktop”: selezionatelo. Il processo procede installando automaticamente anche tutti gli altri pacchetti/librerie necessari per il funzionamento dei software (Desktop o Web) che avete scelto.

Completata l’installazione, potete verificare che dentro la cartella di OSGeo4W ci trovate:

  • il file httpd_qgis.conf (percorso: C:\OSGeo4W\httpd.d\httpd_qgis.conf), che è il file CONF per il web server Apache;
  • la sotto-cartella C:\OSGeo4W\apps\qgis\bin con il seguente contenuto:

OSGeo4W apps

nella figura, ho evidenziato i files che si riferiscono espressamente a QGIS server.

Configurazione di Apache su Windows

Diamo per scontato che il web server Apache sia già installato nel vostro sistema Windows; se non lo fosse dobbiamo provvedere. Esistono vari modi per farlo e su Internet trovate varie guide su come fare. Se per installare QGIS server avete usato OSGeo4W 32 bit, potete installare Apache anche con essa; infatti sotto il gruppo pacchetti “Web” trovate anche la voce relativa ad Apache.

OSGeo4W 32bit - web

Invece, almeno fino ad oggi, questo non è previsto con la OSGeo4W 64 bit.

Vi sconsiglio invece di usare OSGeo4W 64 bit per installare QGIS e QGIS server e poi OSGeo4W 32 bit per installare Apache! Infatti le due versioni (32 e 64 bit) danno origine a software che, oltre a essere installati in directories diverse, potrebbero dare problemi di incompatibilità. Quindi se avete installato QGIS con la OSGeo4W 64 bit, installate Apache con un suo proprio installer; per esempio potete usare Apache Lounge.

Se  installate Apache con OSGeo4W 32 bit, poichè nella sua configurazione non è impostata la porta di default sulla quale lavora il web server (la porta 80), dovete anche ricordarvi di modificare il file C:\OSGeo4W\apache\conf\httpd.conf e precisamente la riga:

Dopo aver installato Apache, affinché QGIS server funzioni, dobbiamo effettuare due operazioni:

  • installare (se non c’è già) ed abilitare il modulo FastCGI di Apache;
  • configurare Apache perchè possa riconoscere QGIS server.

Non tutte le installazioni di Apache includono anche il modulo FastCGI; per verificare, controllate che dentro la sottocartella modules di Apache ci sia il file mod_fcgid.so.

Apache modulo FastCGI

Poi dobbiamo assicurarci che il modulo FastCGI sia abilitato e cioè che dentro il file CONF di Apache (C:\Apache24\conf\httpd.conf) ci sia la riga:

Ricordiamoci sempre che quando si modifica il file CONF, affinché le modifiche siano effettive, bisogna riavviare il web server!

Il file CONF di QGIS server contiene le impostazioni perché Apache possa far funzionare correttamente il suo modulo FastCGI; si chiama httpd_qgis.conf e si trova dentro la relativa cartella di OSGeo4W (precisamente in: C:\OSGeo4W\httpd.d\httpd_qgis.conf). Questo è il suo contenuto:

Notiamo in particolare che abbiamo disabilitato (remmato con #) le due direttive: Order allow, deny e Allow from all; il motivo è che si tratta di una vecchia sintassi non più supportata nelle attuali versioni di Apache. Ad esse abbiamo sostituito la nuova direttiva: Require All Granted. Attenzione che se ci dimentichiamo di fare questa modifica, quando proviamo ad eseguire (nel browser) il FastCGI di QGIS server ci viene restituito il seguente errore “403 Forbidden“:

403 forbidden

Se non abbiamo installato Apache usando OSGeo4W (per es. ci sia installato Apache 2.4 nella directory C:\Apache24), gli dobbiamo far conoscere la configurazione che richiede QGIS server. Per fare questo dobbiamo:

  • prendere il file di CONF di QGIS server C:\osgeo4w\httpd.d\httpd_qgis.conf e copiarlo dentro la cartella di Apache C:\Apache24\conf\extra ;
  • modificare il file CONF di Apache C:\Apache24\conf\httpd.conf aggiungendo dopo la sezione  “# Supplemental configuration” la riga: Include conf/extra/httpd_qgis.conf

e quindi come sempre,  riavviare Apache.

Se tutte le operazioni descritte fino ora per installare QGIS server, abilitare FastCGI, … etc, sono andate a buon fine, facendo al solito la prova di lanciare dal browser una richiesta GetCapabilities WMS:

otterremo questa risposta:

WMS Capabilities

La richiesta GetMap

Una volta che QGIS server è installato correttamente, possiamo facilmente pubblicare con WMS una mappa realizzata con QGIS  e salvata come progetto .qgs; la mappa può essere composta da uno o più layer (raster e vettoriali) e il loro stile e le etichette definiti, come meglio ci piace, usando i comodi strumenti di cui è dotato QGIS.

Ma intanto possiamo fare una semplice prova, richiamando la mappa con una richiesta WMS GetMap direttamente nel nostro browser.

Supponendo che il nostro progetto si chiami rieti.qgs (lo uso qui come esempio), nel caso di sistema Windows, se esso si trova nella cartella C:\GIS_data\rieti.qgs, dobbiamo scrivere il seguente URL:

Esempio WMS GetMap

Similmente nel caso di sistema Linux, supponendo che il progetto si trovi nella cartella /home/user/GIS_data/rieti.qgs , l’ URL per la GetMap diventa così:

Esaminiamo gli elementi che caratterizzano questa semplice richiesta:

  • map=<path progetto .qgs>: la posizione assoluta del progetto nel nostro file-system;
  • SRS=EPSG:3857: il codice EPSG del sistema di riferimento del progetto .qgs;
  • BBOX=1429860,5220590,1433041,5222533: le coordinate min e max del bounding box che racchiude la porzione geografica della mappa da reppresentare;
  • WIDTH=800&HEIGHT=400: le dimensioni dell’immagine da rappresentare sul browser;
  • LAYERS=layer1,layer2,layer3: l’elenco col nome dei layers del progetto .qgs che si vogliono reppresentare;
  • FORMAT=image/png: il formato immagine (PNG, JPG, TIF) da usare per rappresentare la mappa sul browser.

Cambiando questi parametri possiamo variare: l’estensione geografica della mappa rappresentata, le dimensioni dell’immagine (o cornice della mappa) e quali layers della mappa rappresentare.
Naturalmente è inutile evidenziare che si tratta di una mappa statica (immagine) sul quale non si può fare alcun tipo di operazione.

Pubblichiamo i nostri progetti

Se vogliamo che una mappa possa essere ricevuta da un client WMS senza bisogno di specificare il parametro map, dobbiamo spostare (o copiare) il progetto .qgs che la realizza nella directory cgi-bin dove si trova il modulo qgis_mapserv.fcgi.  

Nel caso di un sistema Debian/Ubuntu la cartella è /usr/lib/cgi-bin e invece di copiarci dentro il file .qgs, un’altra possibilità (che io preferisco) è creare un link simbolico al file, senza spostarlo dalla sua cartella originaria.
Sempre riferendomi al mio progetto-esempio (rieti.qgs), facciamo così:

usr/lib/cgi-bin

Fatto ciò, ricordiamoci di riavviare Apache (dobbiamo farlo sempre ogni volta che aggiorniamo il contenuto della cartella cgi-bin) e al seguente URL: http://xxx.xxx.xxx.xxx/cgi-bin/qgis_mapserv.fcgi, dove xxx.xxx.xxx.xxx è l’indirizzo IP del server, sarà disponibile il servizio WMS che distribuisce la mappa realizzata col nostro progetto.

Oppure, come più frequentemente succede, al web server è associato un nome-dominio come per esempio “www.paperino.com”; e allora l’indirizzo per accedere ai servizi di QGIS server sarà: http://www.paperino.com/cgi-bin/qgis_mapserv.fcgi.

Attenzione a non fare confusione! Il precedenteindirizzo non va scritto direttamente nel browser (non funzionerebbe!) ma va indicato come indirizzo del server, nelle impostazioni del client WMS che poi provvederà ad inviare le richieste (GetCapabilities, GetMap, … etc) per ricevere e gestire la mappa.
Naturalmente se siamo in ambiente test, in cui sia il client WMS che il server si trovano sulla stessa macchina (localhost), allora l’URL diventa semplicemente: http://localhost/cgi-bin/qgis_mapserv.fcgi.

connessione WMS

Analogamente si opera  in ambiente Windows, cambiano solo le directory; dobbiamo copiare (o spostare) il progetto .qgs nella cartella dove si trova il modulo qgis_mapserv.fcgi.exe, cioè in C:\OSGeo4W\apps\qgis\bin; corrispondentemente l’URL per accedere al server diventa questo: http://xxx.xxx.xxx.xxx/qgis/qgis_mapserv.fcgi.exe .

Windows QGIS server dir

Con questo meccanismo possiamo pubblicare tutti i progetti .qgs che vogliamo, copiandoli o spostandoli nella directory:

  • /usr/lib/cgi-bin/ nel caso di sistema Linux
  • C:\OSGeo4W\apps\qgis\bin nel caso di sistema Windows

soltanto che in questo caso, essendoci più progetti, non basta più specificare (nel client WMS) solo l’URL principale del server, perchè così facendo si potrà ricevere solo il primo progetto (… se non erro in ordine alfabetico) che c’è nella cartella. Allora per poter specificare quale progetto (mappa) vogliamo ricevere, all’URL bisognerà aggiungere in coda il valore del parametro map :

  • http://xxx.xxx.xxx.xxx/cgi-bin/qgis_mapserv.fcgi?map=nome_progetto.qgs nel caso di sistema Linux
  • http://xxx.xxx.xxx.xxx/qgis/qgis_mapserv.fcgi.exe?map=nome_progetto.qgs nel caso si sistema Windows

Oppure un’altra strategia consiste nel creare dentro la cartella principale, una sottocartella per ogni progetto .qgs che, per semplicità, possiamo chiamare con lo stesso nome del progetto (ma possiamo fare diversamente). Poi dentro ad ognuna, mettiamo una copia o un collegamento sia del file di progetto .qgs sia del file qgis_mapserv.fgci.
Così facendo l’URL per riferire i vari progetti è fatto così (caso Linux): http://xxx.xxx.xxx.xxx/cgi-bin/sottocartella/qgis_mapserv.fcgi

Come esempio, nella figura seguente si vede come abbiamo pubblicato tre diversi progetti: uno (rieti.qgs) nella cartella principale cgi-bin e gli altri due (latina.qgs, orvieto.qgs) nelle sottocartelle omonime.

progetti qgs

Dopo aver riavviato Apache i tre progetti (ovvero le mappe da essi generati) saranno disponibili ai seguenti indirizzi (stiamo supponendo che il client è anche in localhost):

  • rieti.qgs: http://localhost/cgi-bin/qgis_mapserv.fcgi
  • orvieto.qgs: http://localhost/cgi-bin/orvieto/qgis_mapserv.fcgi
  • latina.qgs: http://localhost/cgi-bin/latina/qgis_mapserv.fcgi

Naturalmente questo stesso sistema può essere utilizzando anche lavorando sotto Windows.

Per adesso ci fermiamo qui!
In un prossimo articolo vedremo come su QGIS, si imposta e configura il funzionamento di QGIS come OWS server per un dato progetto.

condividi: