QGIS server web clients

Web client per QGIS server

QGIS server funziona come modulo CGI/FastCGI di Apache Web Server e realizza un server OGC, ovvero espone geodati sul web con i protocolli OGC: WMS, WFS/WFS-T e WCS. Questi possono essere ricevuti e trattati con una qualunque applicazione desktop che implementi un client OGC. Oppure possono essere presentati su una pagina web, tramite un’applicazione client che realizzi un webGIS o più semplicemente un visualizzatore dati geografici con delle funzionalità per l’utente.

In un  precedente articolo, abbiamo già visto come si fa per rendere subito disponibili, come servizi WMS e WFS, i layers di un progetto QGIS. E’ sufficiente mettere il file .qgs del progetto nella cartella cgi-bin (o in una sua sotto-cartella) dove si trova il modulo qgis_mapserv.fcgi; in alternativa si lascia il progetto nella sua posizione originale e in cgi-bin si mette solo un link.

usr/lib/cgi-bin

In QGIS, nel pannello OWS server delle “proprietà generali” del progetto, definiremo tutte le impostazioni per configurare il servizio WMS/WFS  (vedi quest’altro articolo) e non dobbiamo fare altro; i layers del progetto .qgs saranno raggiungibili da un qualunque client WMS/WFS tramite un URL del tipo: http://www.nomedominio_server.com/cgi-bin/qgis_mapserv.fcgi?map=nome_progetto.qgs.

Ma qui vogliamo parlare di un’altra cosa: come realizzare un’applicazione web che riesca a colloquiare con QGIS server attraverso il protocollo WMS (se anche con il WFS meglio), o come si dice in gergo un web client.

QGIS web client

Estensioni WMS/WFS di QGIS server

QGIS server implementa  le specifiche dei protocolli WMS 1.3 e WFS 1.1 e precisamente supporta le seguenti richieste:

  • WMS: GetCapabilities, GetMap, GetFeatureInfo, GetLegendGraphic (SLD), DescribeLayer (SLD) e GetStyles (stili QGIS);
  • WFS: GetCapabilities, GetFeature, DescribeFeatureType e Transaction;

Ma oltre a ciò propone delle sue estensioni proprietarie che ne aumentano l’usabilità e che possiamo distinguere in tre gruppi:

  • parametri extra per le richieste standard WMS: GetMap, GetFeatureInfo e GetLegendGraphics
  • parametri extra per la richiesta standard WFS  GetFeature
  • richieste WMS proprietarie: GetPrint GetProjectSettings

Inoltre, tramite una richiesta GetMap è anche implementata la possibilità di esportare un layer vettoriale in formato DXF; a tal scopo per il layer da esportare, bisogna abilitare in QGIS, l’ esposizione in WFS.

Tramite la richiesta GetPrint, QGIS server ha la possibilità di rendere disponibile al client WMS gli eventuali template di stampa definiti in QGIS con il suo compositore di stampa; le stampe possono essere in formato immagine o PDF e una serie di parametri (extent, rotation, grid_interval, scale, … etc) consentono di impostare altre opzioni.

La richiesta GetProjectSettings è simile alla GetCapabilities ma permette di avere informazioni più specifiche relative alle impostazioni (OWS server) del progetto QGIS da cui derivano i dati pubblicati e di cui abbiamo già parlato in questo articolo.

QGIS impostazioni OWS server

I parametri extra ampliano le possibilità di interrogazioni che un client può formulare a QGIS server. Per esempio nella richiesta GetMap si può specificare:  la risoluzione della mappa (DPI), il livello di trasparenza dei layers (OPACITIES) e filtrare le features di un layer vettoriale (FILTER). Oppure per la richiesta GetLegendGraphics abbiamo diversi parametri per impostare le dimensioni degli elementi di una legenda e definire i font delle etichette.

Per altri dettagli, potete guardare nella documentazione ufficiale di QGIS al capitolo: QGIS as OGC Data Server. Qui ci basta sapere che, un web client avrà a disposizione, verso QGIS server, anche di queste estensioni.

Prima di andare avanti e cominciare a parlare dell’oggetto principale dell’articolo, mi preme però fare una precisazione circa la possibilità di creare delle mappe web direttamente da QGIS (intendo la versione desktop) senza scomodare QGIS server.

Il plugin qgis2web

Esiste un plugin di QGIS che si chiama qgis2web (questa è la sua pagina wiki), con il quale è possibile creare subito una pagina web che riproduce i layers di un progetto QGIS con alcune funzionalità di base. Per spiegarci meglio, è una specie di export avanzato, che crea una pagina HTML, più tutta una serie di files di supporto (immagini, librerie JS, fogli CSS, … etc), contenente una mappa web con gli stessi layer del progetto di origine.La pagina creata si può aprire e vedere direttamente con un browser e non  è necessario che venga pubblicata con un web server.

plugin qgis2web

In realtà esiste anche un altro plugin di nome qgis2leaf  (dello stesso autore di qgis2web) che fa quasi la stessa cosa, usando le librerie di LeafletJS; ma questo non viene più aggiornato ed è stato sostituito appunto da qgis2web il quale, oltre ad essere più nuovo, offre due alternative per creare la web map: usando OpenLayers oppure LeafletJS.

Bene, questa è sicuramente una soluzione molto pratica e veloce quando si vuole pubblicare sul web una semplice mappa senza troppe pretese. Ma non ha nulla a che vedere con le soluzioni web che ci può offrire QGIS server: in questo caso, stiamo parlando di un “map server” a tutti gli effetti, che distribuisce geodati su Internet con i protocolli OGC.

Web client: cosa scegliere ?

Come abbiamo detto prima, si può scegliere una qualunque soluzione che riesca a gestire delle richieste WMS perché è con questo protocollo che il client dovrà interagire con QGIS server; naturalmente se poi sono supportate anche le richieste WFS (quelle che ci permettono di trattare le singole features dei layer vettoriali) e WCS ancora meglio. A questo proposito tra l’altro, ricordiamo che QGIS server supporta il WFS-T (Transactional) cioè il protocollo che oltre a leggere i layer vettoriali, permette anche di editare (creare, modificare e cancellare) le sue features.

Possiamo distinguere le possibili soluzioni per un web client di QGIS server in due macro-categorie:

  • web client scritti di sana pianta adoperando HTML, CSS e linguaggi di scripting:
    • linguaggi client-side (JavaScript, AJAX, .. etc);
    • linguaggi server-side (PHP, Python, Java, .. etc);
  • web client già pronti da configurare ed adattare alle proprie esigenze;

E’ evidente che la prima categoria, oltre ad essere una possibilità solo per chi è un “programmatore”, conviene nei casi relativamente semplici, cioè quando si debbano realizzare dei web client non troppo complessi e articolati.
Tra le librerie JavaScript più famose da poter usare, ci sono le stra-note: OpenLayers e LeafletJS. Anzi a questo proposito diciamo che OpenLayers offre qualche vantaggio in più, avendo il supporto per i layer WMS e WFS nativo; invece LeafletJS supporta solo WMS e per usare i servizi WFS deve appoggiarsi a qualche plugin.

Ecco per esempio qui di seguito, il codice OL3 per connettersi a QGIS server in WMS; nell’esempio il server ha un indirizzo IP 156.45.XXX.23 e il progetto QGIS si chiama rieti.qgs e due suoi layer si chiamano rieti_strade, rieti_edifici

Certo, scriversi un web client partendo da zero è comunque una fatica e richiede tempo! Allora, tenuto conto che applicazioni di questo genere sono abbastanza standard (nella struttura e nei componenti), esistono ormai tantissimi prodotti open source, siano questi framework o toolkit, che permettono di accelerare i tempi di realizzazione. Uno di questi è GeoExt che tra l’altro è  basato proprio su OpenLayers ( eanche su ExtJS); un altro è il noto framework MapFish.
Per esempio, in OSGeo-Live è incluso un visualizzatore di mappe di QGIS server, realizzato proprio con GeoExt (GeoExt viewer).

QGIS server viewer

L’altra alternativa, ancora più rapida, è usare dei web client già fatti (solo da installare e configurare) e ad oggi, le possibilità per QGIS server sono essenzialmente due:

  • QGIS Web Client (QWC) – è compreso nel programma di sviluppo di QGIS e quindi curato dallo stesso team di programmatori. Si basa sulle librerie di OpenLayers, GeoExt e ExtJS3, ma comprende anche delle funzionalità realizzate in PHP.
  • Lizmap – è un progetto nato nel 2011, sempre open source (github – 3liz), sviluppato da una società francese che comprende: un plugin per QGIS più un web client vero e proprio. Dallo scorso luglio 2016 è disponibile l’ultima versione, la major release 3.x.

QWC e Lizmap

Al momento Lizmap è sicuramente un prodotto più nuovo e funzionale di QWC; quest’ultimo si basa ancora su OpenLayers 2 e ExtJS3  e non viene più aggiornato (tranne piccoli aggiustamenti). Da un anno circa,  si è passati allo sviluppo della nuova generazione denominata QWC 2, basata su OpenLayers 3 e  MapStore2 di GeoSolutions; ad oggi è disponibile una versione demo scaricabile dal suo repository su Github: qwc2-demo-app.

Nonostante questo, nell’attesa che venga rilasciata la prima versione stabile di QWC 2 (si prevede entro il 2017), l’uso di QWC è comunque una scelta da non scartare, sia perché va più che bene per realizzare web app non troppo complesse, sia perché la sua installazione e messa in funzione  è molto semplice. Infatti, mentre LizMap per funzionare richiede dei componenti d’interfaccia verso QGIS (middleware), QWC è già pronto così com’è, semmai si possono migliorare certe funzionalità aggiungendo degli script serverside.

QGIS Web Client

Non esiste una procedura di installazione di QWC in senso classico; dobbiamo scaricare tutte le cartelle presenti su Github (qgis/QGIS-Web-Client) che contengono i files dell’applicativo e quelli per la sua configurazione, più dei dati di esempio ed altri moduli necessari per alcune funzionalità. La cartella che contiene il core dell’applicazione web è site.

QWC repository

Mettete tutto il download in una cartella rinominata opportunamente (per es. chiamatela  qgis_web_client) e pubblicatela sul web server Apache nella vostra macchina/server; se siete pratici di Apache nessun problema! Altrimenti potete incontrare qualche difficoltà specie per la sua configurazione, che dipende dalla directory dove mettete  qgis_web_client e da dove si trova QGIS server.

Se siete alle prime armi, vi consiglio di fare una pubblicazione standard (nella document root di default di Apache, che su Linux è generalmente la: /var/www/html/) e non cimentarvi in cose tipo “virtual-host”. Inoltre se si opera in ambiente Linux, la configurazione può essere fatta più comodamente con lo script install.sh.

Banale, ma meglio ripeterlo: ovviamente deve essere già installato e funzionante QGIS server.

QWC si può installare in  qualunque sistema in cui ci sia presente Apache, quindi va bene sia su Linux che su Windows. Però stiamo parlando di SW open source nati e sviluppati in ambiente Linux; quindi queste sono le piattaforme da preferire. Su Windows qualche problema o funzionamento anomalo può capitare, quindi meglio evitare.

Una volta che QWC è pubblicato sotto un certo URL (per es.  www.mio_server.com/qgis_web_client/site/esso è già disponibile e la sua interfaccia web è la seguente:

QWC web page

Per visualizzare i layer di una mappa, ovvero di un progetto .qgs pubblicato con QGIS server, basta indicare nell’URL il parametro map specificando il path del progetto, per esempio:

www.mio_server.com/qgis_web_client/site/qgiswebclient.html?map=/usr/lib/cgi-bin/mia_mappa.qgs

Naturalmente la configurazione di QWC può essere fatta in modo che non sia necessario specificare il path assoluto dei progetti .qgs, così che esso non compaia esplicitamente nell’URL.

Ma vediamo sinteticamente  quali sono le principali caratteristiche di QWC:

  • effettuare ricerche di geodati, semplici o complesse (indicizzate su PostGIS);
  • misurare lunghezze ed aree;
  • identificare le features di un layer e visualizzarne  gli attributi;
  • controllare i layer (ordine e trasparenza);
  • selezionare/cambiare il tema della mappa (multi-progetto);
  • visualizzare la legenda ed i metadati dei layer;
  • stampare la mappa usando i template definiti nel progetto QGIS.

La figura seguente, tratta da un webGIS realizzato con QGIS server e QWC (il SIT PRG del Comune di Asti) mostra i quadri e le funzioni principali di QWC:

Interfaccia QGIS Web ClientUn altro webGIS ben fatto, realizzato con QWC (anche se in tedesco), è quello della cittadina svizzera di Uster webgis.uster.ch, dove tra l’altro si può vedere il funzionamento del selettore dei temi-mappa.

I due webGIS indicati come esempio, provano inequivocabilmente che QWC, pur essendo un prodotto ormai datato, resta comunque ancora valido per molte soluzioni. Tra l’altro chi è capace di programmare e manipolarne il codice, può usare QWC come “punto di partenza” per realizzare un web client più avanzato o comunque con le modifiche ed i miglioramenti che interessano. Ne è un esempio questa variante Extended QGIS-Web-Client sviluppata da Uros Preloznik e disponibile sul suo repo Github.

Con l’uscita di QWC 2, che come abbiamo detto è basato su nuove tecnologie, oltre a dei miglioramenti di funzionamento, una struttura più modulare ed una maggiore facilità d’uso (specie per la configurazione) ci sarà una nuova interfaccia web, compatibile con tutti i browser più diffusi e di tipo “responsive” (che si adatta alle dimensioni del display). Queste ed altre innovazioni già messe in cantiere, renderanno la nuova versione di QWC all’altezza delle più attuali soluzioni webGIS; quindi aspettiamo fiduciosi!

Lizmap

Per far funzionare Lizmap sono necessari due componenti distinti: uno è un plugin di QGIS e l’altro è il web client vero e proprio. L’installazione del plugin Lizmap avviene normalmente come per tutti i plugin di QGIS, cioè basta andare nel menù per la gestione e l’installazione dei plugin e sceglierlo.

Lizmap plugin installazione

Il plugin serve per poter configurare il progetto .qgs che si vuole pubblicare tramite il relativo web client; infatti la sola configurazione (sempre richiesta) nelle proprietà del progetto di QGIS ed in particolare nel pannello “OWS server” non basta. Tramite il plugin vanno definiti altri aspetti che sono propri di come il progetto verrà visualizzato e gestito col web client di Lizmap, che possiamo così riassumere:

  • opzioni per ciascun layer della mappa (metadati, legenda, popup, caching, … etc);
  • opzioni generali per la mappa (estensione iniziale, scale, tools attivati, configurazione dell’interfaccia web, … etc);
  • opzioni sui baselayers disponibili;
  • opzioni per diversi strumenti (tool) attivabili per la mappa: ricerca, visualizzazione tabella attributi, tooltip, filtri, .. etc.

Il plugin Lizmap ha infine una funzione FTP che serve per trasferire (tramite il protocollo di rete FTP) le impostazioni e i dati del progetto dalla sua cartella locale a quella sul server remoto, dove si trova il Web server ed ovviamente QGIS server. Per essere precisi, questa funzione era presente nelle versioni precedenti del plugin, ma ormai è stata eliminata e se la selezionate vi compare il seguente avvertimento:

Lizmap FTP

In sintesi dice che per trasferire i dati locali sul server, cioè sincronizzarli  con quelli remoti, è preferibile usare un client FTP esterno (quello che preferiamo: Filezilla, WinSCP, FireFTP, … etc) in modo da avere un controllo più preciso di cosa si stia facendo. Ma per capire a cosa serve questo trasferimento FTP, dobbiamo spiegare come funziona Lizmap.

Lizmap è basato su un sistema di repository (ognuno può contenere uno o più progetti .qgs); per pubblicare una mappa basta che tutta la cartella locale contenente il progetto ed i suoi dati, venga replicata in una cartella sul server. Perciò, ogni volta che si fa una qualunque modifica del progetto .qgs o delle sue impostazioni, è necessario “sincronizzare” la sua cartella locale con quella corrispondente sul server.

Naturalmente questa sincronizzazione è necessaria se si sta lavorando su macchine distinte:

  • la macchina “locale” dove c’è installato: QGIS e Lizmap plugin;
  • la macchina “server” dove c’è installato: Apache web server, QGIS server e Lizmap web client;

ma se le due cose coincidono, cioè si trova tutto nella stessa macchina, il trasferimento FTP non serve più. In questo caso, basta che la cartella contenente il progetto .qgs ed i suoi dati sia accessibile anche al web server (questo abbia i permessi di lettura) oppure copiare l’intera cartella in una directory di pertinenza del web server.

L’installazione di Lizmap web client non è proprio semplicissima, o meglio richiede una serie di installazione di moduli e di impostazioni manuali, che sono tipiche quando su Apache si vuole configurare un applicativo in PHP. Nella documentazione ufficiale, la procedura completa di installazione è scritta qui: installare Lizmap; ma questa comprende anche info sull’installazione di altre componenti (QGIS server, PHP, estensioni, …) perciò personalmente preferisco e vi consiglio, quella (INSTALL.md) presente sulla repo di Github (https://github.com/3liz/lizmap-web-client/) perché è più sintetica ed aggiornata.

Lizmap web client repository

La prima condizione per installare Lizmap web client è che oltre al web server Apache sia installato ed abilitato il PHP (almeno la versione 5.4, ma ad oggi siamo già alla 7.1); infatti Lizmap web client è stato realizzato con Jelix 1.6, un framework per PHP. Poi è richiesto che siano abilitate alcune estensioni di PHP, come per esempio: dom, simplexml, pcre, session, tokenizer e spl (molte di queste nell’installazione standard di PHP sono già attive di default). Altre estensioni PHP utili sono: sqlite3, gd, xml-rpc e curl.

Per l’installazione vera e propria, bisogna scaricare tutti i file dalla sua repo su Github (il link è quello indicato prima) e poi trasferire in una cartella con nome a vostra scelta (la guida suggerisce “mylizmap“) le sole cartelle: lib, lizmap e temp. Questa cartella va posizionata nella www-root di Apache (tipicamente: /var/www/), dopodichè, come indica la guida INSTALL.md, bisogna creare i file di configurazione ed impostare i permessi.

L’installazione si completa eseguendo da terminale l’applicazione installer.php, la quale vi segnala eventuali problemi (se ce ne sono, bisogna sistemarli e poi rieseguire l’installer) e se tutto è ok, alla fine avrete disponibile l’interfaccia web di Lizmap all’indirizzo: http://127.0.0.1/mylizmap/lizmap/www (se al posto di 127.0.0.1 scrivete localhost è lo stesso).

Lizmap admin interface

L’installazione su sistema Linux o Windows è sostanzialmente la stessa, perché si tratta di un’applicazione web che gira su Apache; quindi è indipendente dal tipo di sistema operativo, ma dipende da come è installato Apache e naturalmente dal tipo di file-system (percorsi e nomi cartelle). A questo proposito, non posso che ripetere quanto ho già detto per QWC: l’installazione su sistemi Linux è preferibile e potenzialmente origina meno problemi.

Ovviamente inutile dire che Lizmap Web Client richiede la presenza di QGIS server (nella stessa macchina server) ed infatti nella sua interfaccia di configurazione va impostato l’URL del WMS server (http://localhost/cgi-bin/qgis_mapserv.fcgi).

Sempre nell’interfaccia di configurazione di Lizmap Web Client,  si definiscono e gestiscono gli elementi attraverso cui vengono organizzate e visualizzate le mappe/progetti realizzate con QGIS: i repository. Ogni repository fa capo ad una cartella locale (accessibile al web server e quindi al web client) che contiene uno o più progetti QGIS ed i relativi dati, raggruppati per tematica o per qualche altro criterio, per  esempio i permessi di accesso per gli utenti. Quando si apre la pagina principale di Lizmap (interfaccia utente) vengono visualizzati i progetti/mappe disponibili organizzati per repository.

Lizmap homepage utente

Riepilogando, quindi con la combinazione del plugin e del web client di Lizmap si ha un sistema completo e pratico per pubblicare le mappe create in QGIS sul web, in cui QGIS server svolge le funzioni di map server OGC:

  • rendering delle mappe come immagini (WMS)
  • export di geodati vettoriali (WFS)
  • esport di geodati raster (WCS)
  • processing server (WPS)

Si potrebbe pure dire che Lizmap web client si comporta da proxy tra la web map sul browser dell’utente e QGIS server.

L’interfaccia che Lizmap 3 offre agli utenti per visualizzare ed interagire con le mappe è molto moderna e ricca di funzioni; come abbiamo già detto, sicuramente superiore a QWC. Qui riassumiano alcune delle sue principali caratteristiche:

  • definizione di utenti e gruppi con relativi permessi di accesso alle mappe;
  • interfaccia di navigazione funzionale e “responsive” (si adatta alle dimensioni del display);
  • interfaccia di amministrazione;
  • aspetto configurabile (CSS, HTML5, JS);
  • popup con informazioni (testo, immagini, link) sugli elementi di un layer;
  • visualizzazione e gestione delle tabelle attributi di un layer vettoriale (selezione, ricerca, fltri, editing, ..etc);
  • generazione e caching automatico delle tiles;
  • map tooltip;
  • export dei geodati vettoriali in diversi formati (geoJSON, shapefile, KML, CSV, … etc);
  • editing dei geodati su PostGIS;
  • stampa usando i template definiti per il progetto in QGIS;

Per chi volesse ulteriori informazioni, oltre alla documentazione ufficiale (Lizmap 3 documentation – ancora parzialmente tradotta in italiano) vi segnalo questa bella presentazione di uno dei creatori di Lizmap (M. Douchin): Lizmap Web Client – Publish QGIS maps online.

Lizmap interfaccia utente - demo

Se invece volete vedere Lizmap “in azione”, sul web esistono già tanti webGIS che sono stati realizzati con esso; qui ve ne indico alcuni:

condividi: