Jag har lite funderingar kring QGIS Server och hur man kan förenkla användningen av denna. Då behöver jag ta reda på lite mera om hur allt fungerar. I detta inlägg så testar jag därför att installera QGIS Server på en vanlig Linux klient.
En fördel att köra QGIS Server på en ”klient” är att man direkt i ett GUI kan kontrollera att kartprojekt fungerar innan man publicerar dessa på servern. Skillnaden mellan en server och en klient (Linux) är i princip bara användargränssnittet, så en QGIS Server skulle mycket väl kunna vara en dator med GUI.
Nu har jag redan QGIS installerat så det enda jag behöver lägga till är QGIS Server:
sudo apt install qgis-server
Sedan kan jag kontrollera att det fungerade genom att köra /usr/lib/cgi-bin/qgis_mapserver.fcgi. Så länge man får något svar över huvud taget så behöver man inte bry sig om att huvuddelen av dessa är någon form av felmeddelande.
Jag följer sedan en instruktion på Internet (http://docs.qtibia.ro/en/docs/user_manual/working_with_ogc/ogc_server_tutorial.html) för att sätta upp en tjänst via Apache webbserver.
Först skapas en konfiguration för tjänsten på webbservern:
sudo nano /etc/apache2/qgisplatform.demo.conf
Här skriver jag in, eller kopierar, texten från länken ovan. Sedan aktiveras den ”virtuella värden” och webbservern startas om:
sudo a2ensite qgisplatform.demo.conf sudo systemctl restart apache2.service
Om man kopierar och klistrar in utan förbehåll så kommer detta att starta en virtuell värd på port 80.
http://localhost/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities&MAP=/home/klakar/QGIS/projektnamn.qgs
Sökvägen ovan fungerar för mig då jag har en projektfil på den sökväg som anges med ”MAP=”. Du anpassar denna parameter till det som gäller för dig.
Resultatet är inte en webbkarta, utan svaret på ”GetCapabilities”. För att få till en webbkarta att testa med så använder jag en enkel LeafletJS karta där själva anropet till kartan ser ut ungefär så här:
var wmsLayer = L.tileLayer.wms('http://localhost/cgi-bin/qgis_mapserv.fcgi?VERSION=1.3.0&MAP=/home/klakar/QGIS/servertest.qgs', { layers: 'ServerTest' }).addTo(map);
En rad hänvisar till WMS tjänsten (allt detta förstås inte av Leaflet, men det fungerar) och en parameter i detta anrop anger vilket lager som skall läggas till från tjänsten. Här använder jag det namn jag sätter i projektinställningarna (Kort namn).
Det går att hämta varje lager för sig till tjänsten, om man vill kunna hantera lager i webbkartan också.
Och ja! Kartan i webbtjänsten ser exakt ut som den gör i QGIS. För LeafletJS får man dock tänka på att det är väldigt få referenssystem som stöds som standard. Detta går att jobba med och om man vill ha mer kapacitet direkt från början så finns ju alltid Open Layers.
Tanken jag så småningom om vill testa är:
- Kan man ”testa” om QGIS Server är lokalt installerad?
- Kan man baka in detta i ett plug-in…
- …och därmed ”publicera” projekt (eller lager) direkt till servertjänster?
- Kanske publicera webbkartor eller IFRAMES direkt från ett plug-in?
- Välja en extern QGIS Server om den inte finns lokalt…
Det vore ganska ”nice” att direkt från QGIS ”publicera” webbkartor utan att behöva knappa en massa kod. Alla komponenter finns där, men det vore trevligt med ett helhetskoncept där QGIS, QGIS Server, Webbserver med portal (kanske GeoNode?), men även en ”cache” som kan snabba upp WMS tjänsterna, finns med. Dessutom med en enkel installer…
Vi får se vad som kommer av nästa GeoNode version och om QGIS Server blir ett praktiskt användbart alternativ som ”Back End”. Sedan skall vi inte glömma QGIS Web Client 2, som också är på gång.
Ny funktionalitet i QGIS 3 med 3D och integration med diagram gör allt än mer intressant, men samtidigt lite krångligare att integrera med en webbtjänst. WMS är ju inte 3D, så det kommer att krävas en helt annan typ av tjänst för att publicera 3D från QGIS på webben (kanske CesiumJS).
Det krävs inte mycket för att få igång QGIS Server på en befintlig klient! Däremot så är det ganska många parametrar som krånglar till funktionaliteten när man skall integrera tjänsterna med en webbkarta. Jag behöver titta mer på inställningar och liknande och vad som fungerar och inte fungerar kopplat till Leaflet och OpenLayers. Jag vill exempelvis kunna använda nationella koordinatsystem i webbkartorna, vilket har ställt till det lite i mina inledande tester.
Du skriver att ”Kartan i webbtjänsten ser exakt ut som den gör i QGIS.”
Har du testat Qgis Server 3, och kan du i så fall visa valfritt teckensnitt i de karttjänster du skapar?
Själv har jag skapat en WMS-tjänst med Qgis Server 3.0.2 (installerad via OSGEO4W64) på min Windows 10-dator med en fristående installation av Apache httpd (ej OSGEO4W64-versionen) och mod_fcgid. Allt fungerar som det ska förutom att WMS:en bara visar ett generiskt teckensnitt. När jag väljer teckensnitt för punktskikten med ortnamn och adresser (under Labels eller Symbology > Font marker) så ser allt bra ut i Qgis Desktop 3, medan WMS-tjänsten som använder samma projektfil (.qgs) inte ens kan rendera Arial. Det enda teckensnitt som visas är ”QGIS Vera Sans” har jag till sist kommit underfund om, och det är inte installerat på datorn utan verkar vara inbakat i qgis_mapserv.fcgi.exe. Jag har inga problem med teckensnitten på datorn och de ligger i standardmappen C:\Windows\Fonts, så det hela är lite märkligt.
Kort uppföljning till min föregående kommentar ang. teckensnitt i QGIS Server ifall någon råkar ut för samma problem. Jag löste det hela genom att ladda ned en plugin, QGIS Font Loader (https://github.com/avinet/qgis-server-font-loader), som jag hittade av en slump.
Den är visserligen gjord för QGIS 2 men genom att ändra ett par rader i koden funkar den utmärkt med QGIS 3. Dessutom kan man ändra sökvägen i en av py-filerna så att den pekar på standardmappen C:\Windows\Fonts. Efter det visar QGIS Server samma teckensnitt på etiketterna som jag har valt i QGIS Desktop. Varför QGIS Server inte lyckas med det på egen hand, utan denna plugin, är fortfarande en gåta.