QGIS server

QGIS server: come funziona

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, ma non è così!
QGIS server va installato a parte, inoltre non richiede necessariamente che sia presente anche QGIS; questo può essere altrove, su un’altra macchina diversa da quella del server. I progetti QGIS (file .qgs) che si vogliono esporre sul web, verranno poi trasferiti dalla macchina di produzione al sistema server.

E’ probabile che in qualche prossimo articolo, spiegheremo come si installa nei dettagli QGIS server in sistemi Linux e Windows.
[agg. del 15/05/17] pubblicato articolo: come si installa QGIS server su Debian/Ubuntu.

Quando QGIS server è stato installato, una verifica semplice da fare per vedere se è tutto a posto, soprattutto la relativa configurazione sul web server Apache, consiste nel lanciare dal web browser una richiesta WMS GetCapabilities, scrivendo nel browser il seguente URL:

su sistema Linux

oppure su sistema Windows (cambia il nome e la posizione del modulo FCGI di QGIS server)

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

WMS GetCapabilities

se non dovesse succedere e compare invece una segnalazione di errore, vuol dire che c’è da rivedere qualcosa e in genere si stratta di una errata di configurazione.

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

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

Pubblicazione di più progetti

Con la procedura appena vista possiamo pubblicare tutti i progetti .qgs che vogliamo, copiandoli o spostandoli nella cartella che contiene il modulo FCGI di QGIS server:

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

progetti qgs

Ma in questo caso, essendoci più progetti, non basta più specificare nel client WMS il semplice URL del server, perchè così facendo si può riceve solo il primo progetto (… se non erro in ordine alfabetico) che c’è nella cartella. Per poter scegliere 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

Un’altro modo consiste nel creare dentro la cartella principale, una sottocartella per ogni progetto .qgs che, per esempio, possiamo chiamare con lo stesso nome del progetto (ma non è obbligatorio). 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

Per vedere un esempio pratico, 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 all’indirizzo: http://localhost/cgi-bin/qgis_mapserv.fcgi
  • orvieto.qgs all’indirizzo: http://localhost/cgi-bin/orvieto/qgis_mapserv.fcgi
  • latina.qgs all’indirizzo: http://localhost/cgi-bin/latina/qgis_mapserv.fcgi

Naturalmente questa stessa soluzione può essere utilizzata anche se siamo in ambiente Windows.

Per adesso ci fermiamo qui! In un prossimo articolo vedremo come su QGIS, si imposta e configura per un dato progetto il comportamento che dovrà avere quando viene pubblicato con QGIS server.

condividi: