Hoppa till innehållet

QGIS

det fria GIS-programmet för skrivbordet

Vad det är

QGIS är ett skrivbordsprogram för att titta på, redigera och analysera kartdata. Projektet startade i maj 2002 under namnet Quantum GIS, och det första målet var blygsamt: ett visningsprogram för geospatiala data. Sedan dess har det vuxit till ett fullständigt geografiskt informationssystem som öppnar lager från filer, spatiala databaser och webbkarttjänster, ritar dem tillsammans på en karta, redigerar deras geometri och attribut, kör analyser på dem och lägger upp resultatet som en tryckt karta, en atlas eller en rapport.

Det är ett officiellt projekt inom Open Source Geospatial Foundation, släppt under GNU General Public License, skrivet i C++ ovanpå verktygslådan Qt, och det körs på de flesta Unix-plattformar, Windows och macOS. En ny version kommer ungefär var fjärde månad. Var tredje av dem, ett mönster som började med 2.8, är en version med långtidsstöd som underhålls tills nästa långtidsversion ersätter den, medan den senaste versionen får en punktversion med felrättningar varje månad. När detta skrivs är de 3.44.15 och 4.2.3.

QGIS läser mycket via andra projekt. Vektorfiler kommer in genom drivrutinerna i GDAL, vilket är skälet till att listan över format som går att öppna är så lång, och rasterdata kommer samma väg. Tabeller i PostGIS, SpatiaLite, SQL Server och Oracle läses där de ligger, och projektets egen funktionslista påpekar att data visas i sitt eget format och sin egen projektion, utan omvandling till något internt format.

Fyra delar till får betydelse när ett team delar på QGIS.

Projektet är arbetsenheten. En .qgs-fil är XML som listar varje lagers datakälla med dess stil, etiketter, formulär och utskriftslayouter. En .qgz-fil är ett zip-arkiv som rymmer den XML-filen tillsammans med en .qgd-fil med hjälpdata. Ett projekt kan också lagras i ett GeoPackage eller i en PostgreSQL-databas, bredvid de lager det beskriver.

Processing är analysramverket: en verktygslåda med algoritmer från QGIS egen leverantör och från GDAL, med GRASS som ytterligare leverantör, en modellbyggare som kedjar ihop algoritmer till en graf, ett gränssnitt för batchkörning och en historik över varje körning. Samma algoritmer kan köras utan skrivbordet genom ett kommandoradsverktyg, qgis_process:

qgis_process run native:reprojectlayer -- \
  INPUT=roads.shp TARGET_CRS=EPSG:25832 OUTPUT=roads.gpkg

PyQGIS är gränssnittet mot Python bakom insticksprogram, den inbyggda konsolen och fristående skript. QGIS Server publicerar dessutom en projektfil på webben som OGC-standardtjänster, WMS, WFS, WCS och OGC API Features, och körs bakom en webbserver som en FastCGI- eller CGI-applikation.

Varför det spelar roll

En del geospatialt arbete förblir manuellt hur bra en datapipeline än är: att avgöra om en fastighetsgräns är fel eller om flygfotot under den är det, att rita av ett byggnadsavtryck från en LiDAR-yta, att granska en kunds leverans innan den läses in. Beslutet som QGIS påverkar gäller i vilket verktyg den bedömningen görs och vad som finns kvar när den väl är gjord.

Licens och plattform avgör den första halvan. Varje installation är fri från licensavgift, och samma version installeras på Linux, macOS och Windows, så att en konsult, kundens egen personal och en byggserver alla kan köra den version som projektet gjordes i. Esris kommersiella skrivbordsprogram, ArcGIS Pro, körs bara på Windows.

Den andra halvan handlar om vad som överlever arbetspasset. QGIS läser PostGIS direkt, så en ändring hamnar i den tabell som applikationen hämtar sina data från, och ingen export behöver stämmas av senare. Historiken i Processing sparar varje algoritm med dess parametrar, och varje post kan kopieras ut som ett Python-kommando eller som ett qgis_process-kommando. En rättelse som arbetades fram för hand i en dialogruta kan bli en rad i ett skript som körs på varje leverans därefter. En projektfil kan gå ännu längre och serveras precis som den är av QGIS Server, så att den stil som en person ställde in på skrivbordet är den stil som en webbklient får över WMS.

Kostnaderna handlar mest om disciplin. Ett projekt pekar på data som det inte innehåller, så det är bara så flyttbart som de sökvägar det sparar. Valet mellan långtidsversionen och den senaste versionen är ett verkligt val: den ena ändras långsamt, den andra kommer med nya funktioner var fjärde månad.

Så ser det ut i praktiken

På den här webbplatsen dyker QGIS upp som platsen där geospatiala data granskades och lagades för hand, bredvid de verktyg som gjorde grovjobbet.

Från 2015 till 2022 var QGIS och JOSM verktygen för själva dataarbetet, i rollen som teamledare för utveckling av GIS-mjukvara med ansvar för mer än trettio GIS-projekt ända fram till drift och support. Runt dem fanns resten av stacken: PostgreSQL med PostGIS höll geodatan, GDAL/OGR konverterade den mellan shapefiler, GeoJSON, GeoTIFF, KML och vektortiles, och webbkartorna framför byggdes på Mapbox GL och Leaflet. Uppdragen gällde digital kartläggning i 2D och 3D, LiDAR-bearbetning, georeferering, vektorisering samt kartläggning och navigering inomhus.

Från 2022 till 2024, som dataingenjör i ett storskaligt projekt för geospatial analys, bestod jobbet i att hitta och rätta över 1 000 problem i geodata och tidsseriedata. När spatiala fel skulle spåras och lagas var QGIS ett av verktygen, i kombination med bland annat GDAL och ArcGIS, och de rensningsuppgifter som återkom automatiserades i skript för Bash. PostGIS bar de spatiala databasfrågorna och indexeringen, och deras körtider blev 35 % kortare, en förbättring som arbetet bidrog till.

Var det går fel

Skrivbordet får geospatiala data att se rätt ut på skärmen, och det är just där det mesta besväret gömmer sig.

Ett lager hamnar på fel plats. QGIS projicerar om varje lager i farten till projektets koordinatreferenssystem, så att lager i olika system lägger sig rent över varandra, förutsatt att varje lager anger sitt eget system korrekt. En shapefil som kommer utan sin .prj-fil anger inget system alls, och beroende på en inställning under Options lämnar QGIS det okänt, frågar efter ett system eller använder i tysthet projektets system eller ett förval. Lagningen beror på vilket misstag som gjordes. När koordinaterna stämmer och bara etiketten är fel byter Assign projection eller Define projection etiketten och låter varje hörnpunkt ligga kvar där den är. När koordinaterna verkligen ligger i ett annat system räknar Reproject layer om dem. Find projection, i samma grupp i verktygslådan, listar de system där ett lagers utbredning skulle hamna över ett valt område, vilket gör en gissning till en kort lista.

Ytor räknas ut i kvadratgrader. Uttrycksspråket har två areafunktioner som ser utbytbara ut. $area följer projektets inställningar för ellipsoid och enhet, så med en ellipsoid inställd returnerar den en ellipsoidisk yta i den valda enheten. area($geometry) är alltid plan i lagrets eget system och returnerar det systemets enheter, så på ett lager som lagras i longitud och latitud returnerar den kvadratgrader, ett litet decimaltal som ser rimligt ut i en tabell. Använd $area för varje siffra som en människa ska läsa, eller projicera om lagret till ett projicerat system som passar området innan du mäter.

Ett projekt öppnas med hälften av lagren borta. Ett projekt sparar var varje lagers data finns, inte själva datan. Flytta mappen, byt namn på en fil eller öppna projektet på en kollegas dator, så slutar de sparade sökvägarna att leda någonstans. QGIS visar då dialogrutan Handle Unavailable Layers. Om man väljer att behålla lagren öppnas projektet med dem listade men tomma tills varje källa har lagats. Att spara sökvägar relativt till projektfilen, en egenskap i projektet, låter en mapp med projekt och data flyttas som en enhet. För delat arbete håller det ihop de två att lagra projektet i samma PostgreSQL-databas eller GeoPackage som dess lager.

Samma rättelse klickas igenom igen nästa månad. En lagning som görs i en dialogruta lämnar datan rätt och metoden i någons minne. Nästa leverans med samma fel lagas för hand igen, lite annorlunda. Kopiera körningen ur historiken i Processing som ett qgis_process-kommando första gången den fungerar, och lägg in den i skriptet som läser in leveransen.

Läs mer

  • Foreword — projektets egen beskrivning av vad QGIS är, var det började och licensen det släpps under.
  • Road Map — versionscykeln, hur långtidsversionerna väljs och det aktuella schemat.
  • Working with Projections — omprojicering i farten och vad QGIS gör med ett lager som saknar koordinatsystem.
  • Working with Project Files — formaten .qgs och .qgz, projekt som lagras i databaser och lagning av trasiga sökvägar.
  • Using processing from the command line — qgis_process, dess kommandon och hur parametrar skickas in.
  • Introduction — översikten i handboken för QGIS Server över de tjänster den publicerar ur ett projekt.

Ordlista