11.2. Lesson: Servizi WMS

Scarichiamo il Training demo data e scompattiamo i file nella sottocartella qgis-server-tutorial-data di una qualunque cartella. Raccomandiamo di creare semplicemente una cartella /home/qgis/projects e metterci i file in modo da evitare problemi con i permessi.

I dati demo contengono un progetto QGIS denominato world.qgs che è già pronto per essere usato con QGIS Server. Se vuoi utilizzare un tuo progetto o vuoi imparare come prepararlo, consulta la sezione Configure your project.

Nota

Questo modulo ti presenta gli URL in modo che possa facilmente distinguere i parametri e i valori dei parametri. Mentre il formato normale è:

...&field1=value1&field2=value2&field3=value3

questa esercitazione usa:

&field1=value1
&field2=value2
&field3=value3

Incollarli in Mozilla Firefox funziona correttamente, ma altri navigatori come Chrome potrebbero aggiungere spazi indesiderati tra le coppie field:parameter. Quindi, se si verifica questo problema, puoi usare Firefox o modificare gli URL in modo che siano in un formato di linea.

Fa una richiesta WMS GetCapabilities nel navigatore o con curl:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetCapabilities
&map=/home/qgis/projects/world.qgs

Nella configurazione di Apache della lezione precedente la variabile QGIS_PROJECT_FILE imposta il progetto predefinito su /home/qgis/projects/world.qgs. Tuttavia, nella richiesta sopra hai fatto uso del parametro map per mostrarlo. Se si elimina il parametro map dalla richiesta precedente, QGIS Server emetterà la stessa risposta.

Indirizzando qualsiasi client WMS all’URL GetCapabilities, il client ottiene in risposta un documento XML con metadati delle informazioni di WMS, ad es. quali livelli, la copertura geografica, in quale formato, quale versione di WMS, ecc.

Poiché QGIS è anche a Client WMS/WMTS, puoi creare una nuova connessione al server WMS con l’aiuto dell’url di GetCapabilities precedente. Vedi la sezione Lesson: Web Mapping Services oppure Selezionare server WMS/WMTS su come eseguirla.

Aggiungendo il layer WMS countries al tuo progetto QGIS dovresti ottenere un’immagine come quella sotto:

../../../_images/qgis_getmap_request.png

Fig. 11.33 QGIS Desktop che utilizza il servizio WMS QGIS Server del layer countries

Nota

QGIS Server serve i livelli definiti nel progetto world.qgs. Aprendo il progetto con QGIS puoi vedere che ci sono più stili per il livello countries. Anche QGIS Server ne è consapevole e puoi scegliere lo stile desiderato nella richiesta. Lo stile classified_by_population è stato scelto nell’immagine sopra.

11.2.1. Registri

fileQuando imposti un server, i registri sono sempre importanti in quanto ti mostrano cosa sta succedendo. Hai installato nel file *.conf i seguenti registri:

  • Registri di QGIS Server in /logs/qgisserver.log

  • Registri di accesso Apache qgisplatform.demo in qgisplatform.demo.access.log

  • Registri di errore Apache qgisplatform.demo in qgisplatform.demo.access.log

I file di registro sono semplicemente file di testo e puoi utilizzare un editor di testo per controllarli. Puoi anche usare il comando tail in un terminale: sudo tail -f /logs/qgisserver.log.

Questo mostrerà nel terminale ciò che è scritto in quel file di registro. Puoi anche avere tre terminali aperti per ciascuno dei file di registro in questo modo:

../../../_images/terminal_tail_log.jpg

Fig. 11.34 Uso del comando tail per visualizzare i registri di QGIS Server

Se usi QGIS Desktop per utilizzare i servizi WMS di QGIS Server, vedrai visualizzate tutte le richieste che QGIS invia al server nel registro di accesso, gli errori di QGIS Server nel registro di QGIS Server, ecc.

Nota

  • Se guardi i registri nelle seguenti sezioni dovresti capire meglio cosa sta succedendo.

  • Riattivando Apache mentre guardi nel registro di QGIS Server, puoi trovare alcuni suggerimenti su come lavora.

11.2.2. Richieste GetMap

Per visualizzare il livello countries, QGIS Desktop, come qualsiasi altro client WMS, utilizza le richieste GetMap.

Una semplice richiesta assomiglia a:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&LAYERS=countries
&FORMAT=image/jpeg

La richiesta dovrebbe produrre l’immagine seguente:

Figura: semplice richiesta GetMap a QGIS Server

../../../_images/getmap_simple_request.jpg

Fig. 11.35 Risposta di Qgis Server dopo una semplice richiesta GetMap

11.2.3. moderate Try Yourself Modifica i parametri di immagine e livelli

In base alla richiesta di cui sopra, sostituisci il livello countries con un altro.

Per vedere quali altri livelli sono disponibili, puoi aprire il progetto world.qgs in QGIS e guardarne il contenuto. Tieni a mente che i client WMS non hanno accesso al progetto QGIS, ma guardano solo al contenuto del documento capabilities.

Inoltre, esiste un’opzione di configurazione in modo che alcuni dei livelli esistenti nel progetto QGIS vengano ignorati da QGIS quando attivo il servizio WMS.

Quindi, puoi vedere l’elenco dei livelli quando QGIS Desktop punta all’URL GetCapabilities o puoi provare a trovare altri nomi di layer nella risposta GetCapabilities XML.

Uno dei nomi dei livelli che è possibile trovare è countries_shapeburst. Potresti trovarne altri, ma tieni presente che alcuni potrebbero non essere visibili a una scala così ridotta in modo da ottenere un’immagine vuota come risposta.

Puoi anche provare con altri parametri , come cambiare il tipo di immagine restituito in image/png.

11.2.4. moderate Follow Along: Usare i parametri Filtro, Opacità e Stili

Fai un’altra richiesta per aggiungere un altro layer, alcuni Extra parameters supported by all request types, FILTER e OPACITIES, ma utilizza anche il parametro predefinito STYLES.

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&FORMAT=image/jpeg
&LAYERS=countries,countries_shapeburst
&STYLES=classified_by_name,blue
&OPACITIES=255,30
&FILTER=countries:"name" IN ( 'Germany' , 'Italy' )

La richiesta dovrebbe produrre l’immagine seguente:

../../../_images/getmap_filter_opacities.jpg

Fig. 11.36 Risponder ad una richiesta GetMap con parametri FILTER e OPACITIES

Come puoi vedere dall’immagine qui sopra, tra l’altro hai detto a QGIS Server di visualizzare solo Germany e Italy dal livello counties.

11.2.5. moderate Follow Along: Usare REDLINING

Fai un’altra richiesta GetMap che faccia uso della funzione REDLINING e del parametro SELECTION dettagliato nella sezione Extra parameters supported by all request types:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&LAYERS=countries,countries_shapeburst
&FORMAT=image/jpeg
&HIGHLIGHT_GEOM=POLYGON((590000 6900000, 590000 7363000, 2500000 7363000, 2500000 6900000, 590000 6900000))
&HIGHLIGHT_SYMBOL=<StyledLayerDescriptor><UserStyle><Name>Highlight</Name><FeatureTypeStyle><Rule><Name>Symbol</Name><LineSymbolizer><Stroke><SvgParameter name="stroke">%233a093a</SvgParameter><SvgParameter name="stroke-opacity">1</SvgParameter><SvgParameter name="stroke-width">1.6</SvgParameter></Stroke></LineSymbolizer></Rule></FeatureTypeStyle></UserStyle></StyledLayerDescriptor>
&HIGHLIGHT_LABELSTRING=QGIS Tutorial
&HIGHLIGHT_LABELSIZE=30
&HIGHLIGHT_LABELCOLOR=%23000000
&HIGHLIGHT_LABELBUFFERCOLOR=%23FFFFFF
&HIGHLIGHT_LABELBUFFERSIZE=3
&SELECTION=countries:171,65

Incolla la richiesta nel navigatore che dovrebbe produrre l’immagine seguente:

../../../_images/getmap_redlining_selection.jpg

Fig. 11.37 Risposta a una richiesta con la funzione REDLINING e il parametro SELECTION

Puoi vedere dall’immagine sopra che i paesi con gli ID 171 e 65 sono stati evidenziati in giallo (Romania e Francia) utilizzando il parametro SELEZIONE e abbiamo utilizzato la funzione REDLINING per sovrapporre un rettangolo con l’etichetta Esercitazione QGIS.

11.2.6. Richieste GetPrint

Una funzionalità carina del server QGIS è che utilizza i layout di stampa del QGIS Desktop. Puoi impararne alla sezione GetPrint.

If you open the world.qgs project with QGIS Desktop you will find a print layout named Population distribution. A simplified GetPrint request that exemplifies this amazing feature is:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?map=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0&
REQUEST=GetPrint
&FORMAT=pdf
&TRANSPARENT=true
&SRS=EPSG:3857
&DPI=300
&TEMPLATE=Population distribution
&map0:extent=-432786,4372992,3358959,7513746
&LAYERS=countries
../../../_images/getprint.jpg

Fig. 11.38 Mo0stra i risultati pdf della richiesta GetPrint

Naturalmente, è difficile scrivere le richieste GetMap, GetPrint, ecc.

QGIS Web Client or QWC è un progetto client Web che può funzionare insieme a QGIS Server in modo che sia possibile pubblicare i propri progetti sul Web o aiutare a creare richieste QGIS Server per una migliore comprensione delle possibilità.

puoi installarlo così:

Ora dovresti essere in grado di vedere la mappa come nella seguente figura:

../../../_images/qwc.jpg

Fig. 11.39 QGIS Web Client consuming the world.qgs project

Se clicchi sul pulsante Stampa in QWC, puoi creare richieste interattive GetPrint. Puoi anche cliccare sull’icona ? nel QWC per accedere all’aiuto disponibile in modo da poter scoprire meglio le possibilità di QWC.

11.2.7. In Conclusion

Hai imparato come utilizzare QGIS Server per fornire i servizi WMS.

11.2.8. What’s Next?

Vedrai come usare QGIS come interfaccia per GRASS GIS.