QGIS OWS server

QGIS server: impostazioni OWS

QGIS server non ha una sua GUI, per configurarlo come OWS (OGC Web Server) si usa QGIS desktop (che da ora in poi indicheremo semplicemente come QGIS); in altre parole QGIS funge anche da back-end per QGIS server. Il quadro principale per tale scopo si trova sotto il menù proprietà del progetto ed è indicato appunto con la voce OWS server.

QGIS proprietà progetto

Il fatto che ci si riferisca alle proprietà del progetto, significa che le impostazioni  non sono generali ma vengono fatte per ogni singolo progetto .qgs che si vuole pubblicare verso l’esterno; cioè per ogni progetto si possono impostare opzioni differenti.

Oltre al quadro OWS server, altre impostazioni sono possibili per gli attributi di un layer vettoriale che viene esposto sul web come WMS/WFS, scegliendo selettivamente quali pubblicare e quali no; lo vedremo più avanti.

Una nota forse ovvia ma importante: è chiaro che il pannello OWS server presente in QGIS, non serve a niente (quindi può trascurarsi) se il progetto che realizzate non dovrà essere pubblicato con QGIS server!

Prima di andare a vedere quali sono le impostazioni che si possono fare in OWS server, ci sono due indicazioni importanti che devono essere date nel quadro delle impostazioni generali: il titolo del progetto e il modo di salvataggio dei percorsi dei layers che lo costituiscono.

QGIS general settings

Il titolo è lo stesso nome che poi viene visualizzato nel client OGC (WMS, WFS, … etc), come attributo title, per identificare la mappa da scaricare; non è necessario indicarlo (se non si indica, viene preso di default lo stesso nome del file .qgs) ma è meglio farlo per rendere più esplicito ai client qual’è la mappa che si sta ricevendo.

La modalità di salvataggio del percorso dei files (principalmente i layers) che costituiscono il progetto è consigliabile che venga impostata come “assoluta“. Se infatti si sceglie la modalità “relativa”, quando il client OGC si connette al server e tenta di scaricare la mappa, è molto probabile che venga restituito un errore

Il motive è che, come si è visto nel primo articolo su QGIS server, il file di progetto .qgs per essere pubblicato viene spostato nella cartella cgi-bin, ma normalmente tutti i files che esso richiama (layers, modelli, stili, simboli, font, … etc) restano nella loro posizione originale. Allora gli eventuali riferimenti relativi  non sono più validi; a meno che non vengano ricostituiti rispetto alla sua nuova posizione in cgi-bin. Ma in genere non conviene!

Fatte queste premesse, vediamo cosa troviamo nel quadro OWS server. Questo è suddiviso in 5 sotto-gruppi come si vede nella seguente figura:

OWS impostazioni

il primo (Service capabilities) serve per le impostazioni generali del server, poi abbiamo i quadri che riguardano i tre diversi tipi di servizi OGC possibili (WMS, WFS e WCS) ed infine c’è un quadro per effettuare dei controlli formali sui layers del progetto. Ma esaminiamoli in dettaglio uno alla volta.

 

Service capabilities

Dopo essere stato abilitato (c’è un checkbox all’inizio), questo quadro permette di specificare informazioni riguardo al server e a chi lo detiene; queste coincidono con i metadati previsti nei protocolli OGC e che vengono restituiti ad un client che esegue una GetCapabilities (dentro il tag <service> … </service>).

OWS service capabilities

Quando queste informazioni non vengono specificate, di default si assumono i valori presenti nel file wms_metadada.xml che si trova nella cartella cgi-bin dove c’è il modulo FastCGI di QGIS server.

 

WMS capabilities

E’ il quadro più corposo (contenente più opzioni) destinato a configurare il servizio per restituire le mappe-progetto come servizio WMS, cioè come delle semplici immagini non contenenti dati (per trasmettere questi ci vuole un servizio WFS o un servizio WCS).

Le opzioni WMS sono a loro volte suddivise in gruppi e nessuno di essi è obbligatorio; ogni gruppo è attivabile o meno tramite relativo checkbox. E’ consigliabile comunque che almeno i primi due gruppi vengano adoperati:

  • Advertised extent: le coordinate piane della porzione (bounding box) di mappa che vogliamo pubblicare; un bottone (Current canvas extent) permette anche caricare automaticamente l’estensione attuale della mappa visualizzata in QGIS .
  • CRS restrictions: per limitare la scelta del sistema di riferimento (CRS: Coordinate Reference System) con cui la mappa WMS potrà essere rappresentata sul client; quando i layer che costituiscono la mappa hanno diversi CRS (in questo caso il progetto .qgs deve avere l’opzione OTF abilitata) se ne possono indicare anche più di uno.  Un bottone (Used) permette di caricare automaticamente tutti i CRS  in uso nel progetto.

WMS capabilities

Sotto, troviamo ancora altri due gruppi di opzioni

  • Exclude composers (*): se si vogliono escludere dalla trasmissione WMS, dei template di stampa realizzati per il progetto .qgs;
  • Exclude layers: se si vogliono escludere dalla trasmissione WMS, dei layers contenuti nel progetto;

essendo opzioni in negativo (esclusione) è ovvio che di default tutti i template di stampa ed i layers presenti nel progetto .qgs, sono disponibili in WMS.

(*) QGIS server ha la possibilità di rendere disponibile al client WMS gli eventuali  template di stampa definiti in QGIS con il print-composer (compositore di stampa); esso infatti oltre alle richieste WMS 1.3.0 standard, contempla una richiesta GetPrint proprietaria atta allo scopo.

Il successivo gruppo di opzioni è abbastanza recente (è comparso dalla versione 2.14) e serve per rendere il servizio WMS compatibile con la famosa direttiva europea INSPIRE; al solito per abilitarlo ed usarlo c’è un’apposita checkbox all’inizio.

QGIS direttiva INSPIRE

Le indicazioni da dare per queste direttive, sono: la lingua usata per il servizio ed il metodo adoperato per definire i relativi metadati INSPIRE secondo due possibilità:

  • scenario 1 – tramite un record dei metadati esterno; allora si specifica l’URL di questo record
  • scenario 2 – tramite un record dei metadati interno; allora si specifica la sua data di creazione ed ultimo aggiornamento.

Non ci soffermiamo su come è fatto un record metadati per INSPIRE, ma sappiamo che QGIS consente di definire dei metadati sia per i layer che per i gruppi di layer e questi metadati contengono parametri (per esempio lo short name e il title) che sono previsti nella direttiva INSPIRE.

Layer metadata

Se siete curiosi  e volete sapere se un dato servizio WMS è compatibile con le direttive INSPIRE, potete provare questo servizio on-line: INSPIRE tester. Immettendo l’URL del servizio, effettua un controllo e restituisce eventuali errori/mancanze e warnings.

L’ultimo gruppo di opzioni per il servizio WMS, riguardano alcune delle informazioni restituite nelle risposte alle varie richieste (GetCapabilities, GetMap, … etc). Per capire esattamente cosa implicano, bisognerebbe sapere come funzionano e cosa restituiscono queste richieste; qui riportiamo sinteticamente solo come usarle.

WMS opzioni

Use layer ids as names
Se selezionato, il nome dei layers restituito nelle risposte viene identificato con un ID numerico univoco; se comunque un layer ha già il suo nome, questo ID gli viene accodato (es: rieti_strade1 28877880121).

Add geometry to feature response
Se selezionato, la risposta alla richiesta GetFeatureInfo restituisce anche informazioni sulle geometrie degli elementi presenti in un layer vettoriale della mappa. Per ogni elemento, tali informazioni sono: il tipo di geometria (punto, linea, poligono) e le coordinate dei punti (estremi o vertici) che lo caratterizzano.

GetFeatureInfo geometry precision
Se è selezionata l’opzione precedente, le coordinate dei punti degli elementi vettoriali (features) sono restituite col numero di decimali qui specificato.

Per esempio (usiamo lo stesso progetto rieti.qgs visto nell’articolo precedente) avendo abilitato l’opzione Add geometry … etc e scegliendo una precisione di 3 cifre decimali, se effettuiamo questa richiesta GetFeatureInfo:

otteniamo la seguente risposta:

GetFeatureInfo esempio

Per chi non lo sapesse, la richiesta GetFeatureInfo serve per reperire informazioni sugli elementi (punti, linee, poligoni) dei layer vettoriali che compongono una mappa WMS ; essa assomiglia alla richiesta GetFeature del servizio WFS, ma è più limitata. Può restituire la risposta in diversi formati (XML, GML, text); quello visto nell’esempio precedente è il formato text/html.

Advertised URL
Questo campo ci da la possibilità di indicare l’ URL dal quale il server WMS fornisce i suoi servizi e che viene restituito nella risposta alla richiesta GetCapabilities. Se viene lasciato vuoto, di default, nelle Capabilites viene restituito l’indirizzo IP o il nome dominio associato al web server (nel caso semplice di ambiente di testing è “localhost”).

WMS URL advertised

Maximun for GetMap Request
Sono parametri che riguardano l’immagine della mappa restituita da una richiesta GetMap.
Width ed Height: fissano la dimensione massima che può avere (in pixel) l’immagine.
Quality for JPEG : la qualità dell’immagine nel caso in cui si sceglie il formato JPEG (min=10, max=100).

 

WFS capabilities

Se un progetto QGIS contiene anche dei layer vettoriali (shapefile, geoJSON, SpatiaLite, … etc), automaticamente essi, oltre ad essere inclusi (come immagine) nella mappa WMS, sono disponibili come servizio WFS. Quindi le loro features e relative proprietà (i dati), vengono trasmesse come tali ad un client WFS.

QGIS WFS capabilities

Le opzioni del servizio WFS prevedono la possibilità di scegliere:

  • quali layer vettoriali pubblicare all’esterno;
  • la precisione (posizioni decimali) delle coordinate dei punti (nodi, vertici) che caratterizzano le features.

Poichè QGIS server oltre al normale WFS, supporta anche il WFS-T (Transactional), allora i layers vettoriali possono pure essere editati/modificati dal client. Perciò nelle opzioni è prevista la possibilità di scegliere, per ogni layer, se e quali operazioni sono possibili:

  • Update: modifica delle features esistenti;
  • Insert: aggiunta di altre features;
  • Delete: cancellazione delle features.

Abbiamo infine un campo Advertised URL che ha un uso equivalente a quello già visto per il servizio WMS, cioè l’URL del servizio restituito nelle WFS capabilities.

 

WCS capabilities

Forse il WCS (Web Coverage Service) è il servizio OGC meno conosciuto, anche perché sono ancora pochi i servizi italiani in rete che lo forniscono. Brevemente, ricordiamo che può considerarsi l’equivalente del WFS per i layer raster, cioè permette di trasmettere un raster non come semplice immagine (come fa il WMS), ma con i dati ad esso associati e la relativa semantica di origine.

L’esempio tipico di raster da trasmettere con il WCS,  sono i DTM (Digital Terrain Model) in cui ad ogni pixel è associato il valore dell’altitudine della data area geografica.

Le opzioni previste, riguardano allora solo i layer raster presenti nel progetto; il quadro semplicemente li elenca e permette di scegliere quali si vogliono pubblicare come WCS.

QGIS WCS capabilities

Anche qui abbiamo poi un campo Advertised URL con lo stesso scopo visto prima sia per il servizio WMS che per il servizio WFS.

 

Test configuration

Questo quadro non serve per delle opzioni, ma  per effettuare dei controlli formali sui layers che compongono il progetto .qgs e vedere se rispettano alcune condizioni richieste nei protocolli OGC.

OWS test configuration

Il risultato del controllo può segnalare degli errori bloccanti, cioè che non permettono la corretta pubblicazione del progetto con QGIS server (raro se i layers sono definiti con la dovuta attenzione), oppure semplicemente dei warnings.

A prescindere da questi controlli, una cosa è certa: è bene evitare che il nome dei layers contenga spazi o caratteri speciali, in quanto ciò implicherebbe che gli URL delle richieste WMS, WFS e WCS,  potrebbero non funzionare correttamente. Nessuna limitazione invece per i titoli che sono puramente descrittivi.

A questo proposito, ricordiamo che nei protocolli OGC, le varie entità (mappa o servizio, layer, gruppi di layer) sono identificate da un <Name> e da un <Title>.
Il <Name> è un identificatore usato per la comunicazione machine-to-machine, mentre il <Title> è una descrizione sintetica ma utile per la comprensione umana. Poi in alcuni casi è presente anche un <Abstract> che è una descrizione facoltativa per esplicitare in modo più discorsivo la natura dell’entità in questione (cosa rappresenta).

WMS layer name

In QGIS quello che corrisponde al <Name> è indicato come short name e abbiamo già visto prima, che esso è definibile sia nei parametri delle service capabilities WMS (qui è riferito al root layer della mappa) sia nei metadati dei diversi layers della mappa.

La stessa cosa si può fare anche per un gruppo di layer; in questo caso nel menù contestuale di un gruppo, c’è una apposita voce Set group WMS data:

group WMS data

La definizione degli short name e dei title è auspicabile ma comunque resta facoltativa. Quando lo short name non viene indicato, nelle risposte alle query, il <name> conterrà il nome con cui è stata identificata l’entità (layer o gruppo) o quello del relativo file. Ma tenete conto che lo short name non può contenere ne spazi ne caratteri speciali; quindi in questi casi il precedente Test segnalerebbe un errore.

 

Attributi dei layers vettoriali

Le impostazioni presenti nel pannello OWS server delle proprietà del progetto, sono quelle fondamentali per configurare come QGIS server deve distribuire sul web le mappe preparate in QGIS. Ma c’è anche una parte che riguarda i layers vettoriali e che viene fatta dal pannello delle loro proprietà.

Se apriamo la voce riguardante i campi (Fields) che compongono la tabella attributi di un layer vettoriale, oltre alle indicazioni sulla loro natura (nome, tipo, lunghezza, …, etc) troviamo dei checkbox che permettono di scegliere se un attributo deve essere reso pubblico nel servizio WMS e/o nel servizio WFS.

QGIS attributi layer

Attenzione a non confondersi, queste impostazioni non servono per stabilire se un layer del progetto deve essere incluso o meno nella mappa trasmessa via WMS/WFS, perchè questa è una scelta che, come già visto, viene fatta nel pannello OWS server. Qui si tratta della possibilità di scegliere quali proprietà del layer trasmesso, devono essere incluse e quali no.

 

Annotazioni sulla mappa WMS

Chi usa abbastanza QGIS,  sa che una mappa può essere ulteriormente arricchita di informazioni visive, usando il tool delle annotazioni; precisamente è possibile scegliere (ad oggi con la release 2.14) tra quattro tipi di annotazioni: Text, Form, HTML e SVG.

QGIS annotazioni mappa

Allora se il nostro progetto contiene anche delle annotazioni,  queste vengono visualizzate correttamente anche nella mappa WMS, se si ha l’accortezza di:

  • deselezionare l’opzione  fixed map position nel pop-up di definizione dell’annotazione;
  • selezionare il salvataggio di percorsi assoluti nelle impostazioni generali del progetto (perchè le annotazioni di tipo Form, HTML e SVG si basano su files esterni);

annotazioni

Impostazioni tramite variabili di ambiente

Quindi abbiamo visto che tutte le impostazioni di QGIS server possono essere fatte all’interno di QGIS, per ogni progetto che si vuole rendere disponibile sul web. Ripeto e sottolineo che non sono impostazioni “generali” ma si riferiscono al singolo progetto .qgs: ognuno ha le sue.

Per i più esperti (… altrimenti lasciate perdere!) delle impostazioni di carattere generale per il funzionamento di QGIS server, si possono fare impostando le seguenti variabili d’ambiente (environment variables):

  • QGIS_OPTIONS_PATH – quando si definiscono delle opzioni su un file QGIS.ini (o QGIS2.ini), serve per indicare il percorso di questo file;
  • QUERY_STRING – serve per definire la query di richiesta da passare di default al server, per capirci quella che viene specificata dopo “http://localhost/cgi-bin/qgis_mapserv.fcgi?” (per es. “service=WMS&version=1.1.1&request=GetCapabilities“); è un’opzione utile quando, per fare dei test, si esegue QGIS server da linea di comando;
  • QGIS_PROJECT_FILE (*) – serve per indicare qual’è il progetto .qgs di default che il server considera a meno che non venga specificato nella richiesta con la variabile map;
  • QGIS_SERVER_LOG_FILE – serve per specificare il percorso ed il nome del file di log; bisogna accertarsi che il server abbia i permessi per scrivere in questo file;
  • QGIS_SERVER_LOG_LEVEL – serve per specificare il livello di log da abilitare: 0 per registrare tutto, 1 per registrare solo warning ed errori critici, 2 per registrare solo gli errori critici;
  • MAX_CACHE_LAYERS – specifica il massimo numero di layers che viene mantenuto in cache per velocizzare la loro trasmissione (di default è uguale a 100);
  • DISPLAY – serve per indicare a X server il numero del display (richiesto nei sistemi Unix-like);
  • QGIS_PLUGIPATH – quando si usano dei plugins Python per QGIS server, serve per indicare il percorso della cartella che li contiene.

(*) Se avete letto il primo articolo su QGIS server, abbiamo visto che quando nella cartella cgi-bin ci sono più progetti .qgs, se non viene specificata la variabile map, QGIS server considera di default il primo che incontra. La variabile QGIS_PROJECT_FILE allora, può essere utile per cambiarlo.

Queste variabili vanno impostate nella configurazione del web server Apache (file .conf) tramite la direttiva SetEnv o meglio FcgidInitialEnv, visto che ormai, nelle versioni recenti, QGIS server funziona come modulo FastCGI.

condividi: