# QGIS

## 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`:

```sh
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](/sv/portfolio/led-the-development-deployment-and-support-of-over-35/).
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](/sv/portfolio/resolved-1-000-issues-in-geographical-data-and-7/).
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](https://docs.qgis.org/latest/en/docs/user_manual/preamble/foreword.html)
  — projektets egen beskrivning av vad QGIS är, var det började och licensen det släpps under.
- [Road Map](https://www.qgis.org/resources/roadmap/) — versionscykeln, hur långtidsversionerna
  väljs och det aktuella schemat.
- [Working with Projections](https://docs.qgis.org/latest/en/docs/user_manual/working_with_projections/working_with_projections.html)
  — omprojicering i farten och vad QGIS gör med ett lager som saknar koordinatsystem.
- [Working with Project Files](https://docs.qgis.org/latest/en/docs/user_manual/introduction/project_files.html)
  — formaten `.qgs` och `.qgz`, projekt som lagras i databaser och lagning av trasiga sökvägar.
- [Using processing from the command line](https://docs.qgis.org/latest/en/docs/user_manual/processing/standalone.html)
  — `qgis_process`, dess kommandon och hur parametrar skickas in.
- [Introduction](https://docs.qgis.org/latest/en/docs/server_manual/introduction.html)
  — översikten i handboken för QGIS Server över de tjänster den publicerar ur ett projekt.

<https://engineer.company/sv/glossary/qgis/>
