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:
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
inqgisplatform.demo.access.log
Registri di errore Apache
qgisplatform.demo
inqgisplatform.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:
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
11.2.3. 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. 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:
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. 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:
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
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ì:
Come utente
qgis
vai nella cartellacd /home/qgis
.Scarica il progetto QWC da qui e decomprimilo.
Crea un collegamento simbolico alla cartela
/var/www/html
in quanto èDocumentRoot
che abbiamo configurato nell’host virtuale. Se hai decompresso l’archivio sotto //home/qgis/Downloads/QGIS-Web-Client-master
puoi farlo consudo ln -s /home/qgis/Downloads/QGIS-Web-Client-master /var/www/html/
.Accedi a http://qgisplatform.demo/QGIS-Web-Client-master/site/qgiswebclient.html?map=/home/qgis/projects/world.qgs dal tuo navigatore.
Ora dovresti essere in grado di vedere la mappa come nella seguente figura:
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.