.

QGIS als OGC Data Server

QGIS Server is een open bron WMS 1.3, WFS 1.0.0 en WCS 1 1.1.1 implementatie die, in aanvulling daarop, gevorderde cartografische mogelijkheden voor thematische kaarten implementeert. De QGIS Server is een FastCGI/CGI (Common Gateway Interface)-toepassing, geschreven in C++ die samenwerkt met een webserver (bijv., Apache, Lighttpd). Het heeft ondersteuning voor plug-ins van Python die snelle en efficiënte ontwikkeling en het uitrollen van nieuwe mogelijkheden mogelijk maakt. Het is financieel mogelijk gemaakt door de EU-projecten Orchestra, Sany en de stad Uster in Zwitserland.

QGIS Server gebruikt QGIS als achterliggend programma voor de logica van GIS en voor het renderen van de kaarten. Verder wordt de bibliotheek Qt gebruikt voor afbeeldingen en platform-onafhankelijk programmeren in C++. In tegenstelling tot andere software voor WMS software, gebruikt QGIS Server cartografische regels als configuratie-taal, zowel voor de configuratie van de server als voor de door de gebruiker gedefinieerde cartografische regels.

Omdat QGIS desktop en QGIS Server dezelfde bibliotheken voor visualisatie gebruiken, zien de kaarten die op het web worden gepubliceerd er hetzelfde uit als in desktop GIS.

In een van de volgende handleidingen zullen we een voorbeeld configuratie opnemen om een QGIS Server in te stellen. Voor nu bevelen we aan om één van de volgende URL’s te lezen voor meer informatie:

Voorbeeld installatie op Debian Squeeze

Op dit punt zullen we een korte en eenvoudige How-to geven voor een voorbeeld-installatie met behulp van Apache2 op Debian Squeeze. Vele andere OS-en verschaffen ook pakketten voor QGIS Server. Bekijk de URL’s hierboven als u het allemaal vanaf de bron moet bouwen.

Voeg als eerste de volgende GIS opslagplaats voor Debian toe door de volgende opslagplaats toe te voegen:

$ cat /etc/apt/sources.list.d/debian-gis.list
deb http://qgis.org/debian trusty main
deb-src http://qgis.org/debian trusty main

$ # Add keys
$ sudo gpg --recv-key DD45F6C3
$ sudo gpg --export --armor DD45F6C3 | sudo apt-key add -

$ # Update package list
$ sudo apt-get update && sudo apt-get upgrade

Installeer nu QGIS-Server:

$ sudo apt-get install qgis-server python-qgis

Installatie van een voorbeeld plug-in HelloWorld voor het testen van de servers. U maakt een map waarin de plug-ins voor de server koken te staan. Dat zal worden gespecificeerd in de configuratie van de virtual host en worden doorgegeven aan de server door middel van een omgevingsvariabele:

$ sudo mkdir -p /opt/qgis-server/plugins
$ cd /opt/qgis-server/plugins
$ sudo wget https://github.com/elpaso/qgis-helloserver/archive/master.zip
$ # In case unzip was not installed before:
$ sudo apt-get install unzip
$ sudo unzip master.zip
$ sudo mv qgis-helloserver-master HelloServer

Installeer de Apache server in een afzonderlijke virtual host luisterend naar poort 80. Schakel de module rewrite in om HTTP BASIC auth headers door te kunnen geven:

$ sudo a2enmod rewrite
$ cat /etc/apache2/conf-available/qgis-server-port.conf
Listen 80
$ sudo a2enconf qgis-server-port

Dit is de configuratie voor de virtual host, opgeslagen in /etc/apache2/sites-available/001-qgis-server.conf :

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html

  ErrorLog ${APACHE_LOG_DIR}/qgis-server-error.log
  CustomLog ${APACHE_LOG_DIR}/qgis-server-access.log combined

  # Longer timeout for WPS... default = 40
  FcgidIOTimeout 120
  FcgidInitialEnv LC_ALL "en_US.UTF-8"
  FcgidInitialEnv PYTHONIOENCODING UTF-8
  FcgidInitialEnv LANG "en_US.UTF-8"
  FcgidInitialEnv QGIS_DEBUG 1
  FcgidInitialEnv QGIS_SERVER_LOG_FILE /tmp/qgis-000.log
  FcgidInitialEnv QGIS_SERVER_LOG_LEVEL 0
  FcgidInitialEnv QGIS_PLUGINPATH "/opt/qgis-server/plugins"

  # ABP: needed for QGIS HelloServer plugin HTTP BASIC auth
  <IfModule mod_fcgid.c>
      RewriteEngine on
      RewriteCond %{HTTP:Authorization} .
      RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
  </IfModule>

  ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  <Directory "/usr/lib/cgi-bin">
      AllowOverride All
      Options +ExecCGI -MultiViews +FollowSymLinks
      # for apache2 > 2.4
      Require all granted
      #Allow from all
  </Directory>
 </VirtualHost>

Schakel nu de virtual host in en start Apache opnieuw:

$ sudo a2ensite 001-qgis-server
$ sudo service apache2 restart

Test de server met de plug-in HelloWorld:

$ wget -q -O - "http://localhost/cgi-bin/qgis_mapserv.fcgi?SERVICE=HELLO"
HelloServer!

U kunt de standaard GetCapabilities van de QGIS server bekijken op: http://localhost/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities

Tip

Als u werkt met een object dat vele knopen heeft dan zal het aanpassen en toevoegen van een nieuw object mislukken. In dit geval is het mogelijk de volgende code in te voegen in het bestand 001-qgis-server.conf

<IfModule mod_fcgid.c>
FcgidMaxRequestLen 26214400
FcgidConnectTimeout 60
</IfModule>

Maken van een WMS/WFS/WCS uit een project van QGIS

We moeten een projectbestand van QGIS met enige gegevens hebben om een nieuw QGIS Server WMS, WFS of WCS te verschaffen. Hier gebruiken we het shapefile ‘Alaska’ uit de voorbeeld gegevensset van QGIS. Definieer de kleuren en stijlen van de lagen in QGIS en het CRS voor het project, als die nog niet gedefinieerd zijn.

Figure Server 2:

../../../_images/ows_server_definition.png

Definities voor een project QGIS Server WMS/WFS/WCS (KDE)

Ga dan naar het menu OWS Server van het dialoogvenster Project ‣ Projecteigenschappen en geef enige informatie over de OWS in de velden onder Service-mogelijkheden. Dit zal verschijnen in het antwoord GetCapabilities van de WMS, WFS of WCS. Als u checkbox Service-mogelijkheden niet selecteert zal QGIS Server de informatie gebruiken die is opgegeven in het bestand wms_metadata.xml dat is opgeslagen in de map cgi-bin.

WMS-mogelijkheden

In het gedeelte WMS-mogelijkheden kunt u het bereik definiëren dat zal worden opgenomen in het antwoord van de WMS GetCapabilities door de minimum en maximum waarden voor X en Y in de velden onder Opgegeven bereik in te voeren. Klikken op Huidige bereik van kaartvenster gebruiken stelt deze waarden in op het bereik dat momenteel wordt weergegeven in het kaartvenster van QGIS. Door checkbox CRS-beperkingen te selecteren kunt u beperken in welke coördinaten referentiesystemen (CRS) QGIS Server zal aanbieden de kaarten te renderen. Gebruik de knop mActionSignPlus onderin om die CRS-en te selecteren uit de selectie voor Coördinaten ReferentieSysteem, of klik op Huidige gebruikte om het in het project van QGIS gebruikte CRS aan de lijst toe te voegen.

Als u printvormgevingen hebt gedefinieerd in uw project, zullen zij worden vermeld in het antwoord GetCapabilities en zij kunnen worden gebruikt in het verzoek GetPrint om afdrukken te maken, met behulp van een van de lay-outs voor de printvormgeving als een sjabloon. Dit is een QGIS-specifieke uitbreiding aan de specificatie voor WMS 1.3.0. Indien u niet wilt dat een printvormgeving wordt gepubliceerd door de WMS, selecteer dan checkbox Printvormgeving uitsluiten en klik op de knop mActionSignPlus onderin. Selecteer dan een printvormgeving vanuit het dialoogvenster Selecteer printvormgeving om die toe te voegen aan de lijst met uigesloten printvormgevingen.

Indien u niet wilt dat een laag of groep lagen wordt gepubliceerd door de WMS, selecteer dan checkbox Kaartlagen uitsluiten en klik op de knop mActionSignPlus onderin. Dit opent het dialoogvenster Selecteer lagen en groepen met restricties dat u in staat stelt de lagen en groepen te kiezen die u niet wilt publiceren. Gebruik de toetsen Shift of Ctrl als u meerdere items in één keer wilt selecteren.

U kunt de door u verzochte GetFeatureInfo als platte tekst, XML en GML ontvangen. XML is standaard, de indelingen tekst of GML zijn afhankelijk van de indeling die wordt gekozen in het verzoek GetFeatureInfo.

Als u dat wilt kunt u checkbox Geometrie aan feature response toevoegen selecteren. Dit zal in het antwoord van GetFeatureInfo de geometrieën opnemen van de objecten in tekstindeling. Als u wilt dat QGIS Server specifieke URL’s voor verzoeken opneemt in het antwoord van WMS GetCapabilities, voer dan de overeenkomende URL in in het veld Opgegeven URL. Verder kunt u de maximale grootte van de kaarten instellen die worden teruggegeven door het verzoek GetMap door de maximum breedte en hoogte in te voeren in de respectievelijke velden onder Maxima voor GetMap-verzoek.

Als één van uw lagen de weergave Kaarttip gebruikt (d.i. om tekst met behulp van expressies weer te geven) zal dit worden vermeld binnen de uitvoer van GetFeatureInfo. Als de laag een Value Map gebruikt voor één van zijn attributen, wordt die informatie ook weergegeven in de uitvoer van GetFeatureInfo.

QGIS support the following request for WMS service:

  • GetCapabilities
  • GetMap
  • GetFeatureInfo
  • GetLegendGraphic (SLD-profiel)

  • DescribeLayer (SLD-profiel)

  • GetStyles (aangepast QGIS-profiel)

WFS-mogelijkheden

In het gebied WFS-mogelijkheden kunt u de lagen selecteren die u wilt publiceren als WFS, en specificeren of zij de bewerkingen Bijwerken, Toevoegen en Verwijderen zullen toestaan. Als u een URL invoert in het veld Opgegeven URL van het gedeelte WFS-mogelijkheden, zal QGIS Server deze specifieke URL opnemen in het antwoord WFS GetCapabilities.

QGIS support the following request for WFS service:

  • GetCapabilities
  • DescribeFeatureType
  • GetFeature
  • Transaction

WCS-mogelijkheden

In het gebied WCS-mogelijkheden kunt u de lagen selecteren die u wilt publiceren als WCS. Als u een URL invoert in het veld Opgegeven URL van het gedeelte WCS-mogelijkheden, zal QGIS Server deze specifieke URL opnemen in het antwoord van WCS GetCapabilities.

Sla nu de sessie op in een projectbestand alaska.qgs. We maken een nieuwe map /usr/lib/cgi-bin/project met rechten als beheerder en voegen het projectbestand alaska.qgs en een kopie van het bestand qgis_mapserv.fcgi toe om het project te verschaffen als WMS/WFS - dat is alles.

Nu gaan we ons project WMS, WFS en WCS testen. Voeg de WMS, WFS en WCS toe, zoals beschreven in Laden van lagen WMS/WMTS, WFS- en WFS-T-cliënt en WCS-cliënt, aan QGIS en laad de gegevens. De URL is:

http://localhost/cgi-bin/project/qgis_mapserv.fcgi

QGIS support the following request for WCS service:

  • GetCapabilities
  • DescribeCoverage
  • GetCoverage

Fijn afstemmen van uw OWS

Voor vectorlagen geeft het menu Velden van het dialoogvenster Laag ‣ Eigenschappen u de mogelijkheid om voor elk attribuut te definiëren of het mag worden gepubliceerd of niet. Standaard worden alle attributen gepubliceerd door uw WMS en WFS. Als u een specifiek attribuut niet wilt publiceren, deselecteer dan het overeenkomende keuzevak in de kolom WMS of WFS.

U kunt watermerken over uw door WMS geproduceerde kaarten leggen door tekst-annotaties of SVG-annotaties toe te voegen aan het projectbestand. Zie het gedeelte gereedschap Annotatie in Algemeen gereedschap voor instructies over het maken van annotaties. Het keuzevak Vaste positie op kaart in het dialoogvenster Annotatie tekst moet worden gedeselecteerd om annotaties als watermerken te laten weergeven op de uitvoer van WMS. Toegang hiertoe kan worden verkregen door te dubbelklikken op een annotatie als een van de gereedschappen voor annotaties actief is. Voor SVG-annotaties dient u ofwel het project in te stellen om absolute paden op te slaan (in het menu Algemeen van het dialoogvenster Project ‣ Projecteigenschappen) of door het pad voor de SVG-afbeelding op een dusdanige manier handmatig aan te passen dat het een geldig relatief pad weergeeft.

Extra parameters ondersteund door het verzoek WMS GetMap

In het verzoek WMS GetMap accepteert QGIS Server een aantal extra parameters in aanvulling op de standaard parameters overeenkomend met de specificatie OCG WMS 1.3.0:

  • parameter MAP: Soortgelijk aan MapServer kan de parameter MAP worden gebruikt om het pad naar het projectbestand van QGIS te specificeren. U kunt een absoluut pad specificeren of een pad relatief aan de locatie van het uitvoerbare bestand van de server (qgis_mapserv.fcgi). Indien niet gespecificeerd zoekt QGIS Server naar .qgs-bestanden in de map waar het uit te voeren bestand voor de server is opgeslagen.

    Voorbeeld:

    http://localhost/cgi-bin/qgis_mapserv.fcgi?\
      REQUEST=GetMap&MAP=/home/qgis/mymap.qgs&...
  • parameter DPI : De parameter DPI kan worden gebruikt om de resolutie voor de verzochte uitvoer te specificeren.

    Voorbeeld:

    http://localhost/cgi-bin/qgis_mapserv.fcgi?REQUEST=GetMap&DPI=300&...
  • parameter OPACITIES: Doorzichtigheid kan worden ingesteld op niveau van de laag of van een groep. Toegestane waarden reiken van 0 (volledig transparant) tot en met 255 (ondoorzichtig).

    Voorbeeld:

    http://localhost/cgi-bin/qgis_mapserv.fcgi?\
      REQUEST=GetMap&LAYERS=mylayer1,mylayer2&OPACITIES=125,200&...

QGIS Server loggen

Stel de volgende omgevingsvariabelen in om naar de server verzonden verzoeken te loggen:

  • QGIS_SERVER_LOG_FILE: Specificeer pad en bestandsnaam. Zorg er voor dat de server de juiste rechten heeft om naar bestanden te schrijven. Het bestand zou automatisch gemaakt moeten worden, verzend eenvoudigweg enkele verzoeken naar de server. Als het er niet is, controleer dan de rechten.

  • QGIS_SERVER_LOG_LEVEL: Specificeer het gewenste niveau voor het loggen. Beschikbare waarden zijn:

    • 0 INFO (log alle verzoeken),

    • 1 WARNING,
    • 2 CRITICAL (log alleen kritische fouten, geschikt voor productiedoeleinden).

    Voorbeeld:

    SetEnv QGIS_SERVER_LOG_FILE /var/tmp/qgislog.txt
    SetEnv QGIS_SERVER_LOG_LEVEL 0

Opmerking

  • Gebruik FcgidInitialEnv in plaats van SetEnv wanneer u de module Fcgid gebruikt!

  • Loggen van server is ingeschakeld, ook als het uitvoerbare bestand is gecompileerd in modus release.

Omgevingsvariabelen

  • QGIS_OPTIONS_PATH: De variabele specificeert het pad naar de map met instellingen. Het werkt op dezelfde manieren als de optie voor de toepassing QGIS –optionspath. Het zoekt naar het bestand met instellingen in <QGIS_OPTIONS_PATH>/QGIS/QGIS2.ini. Bijvoorbeeld: om QGIS server in te stellen op Apache om /pad/naar/config/QGIS/QGIS2.ini bestand met instellingen te gebruiken, voeg toe aan Apache config:

    SetEnv QGIS_OPTIONS_PATH "/path/to/config/"