# QGIS

## Hvad det er

QGIS er et skrivebordsprogram til at se, redigere og analysere geodata.
Projektet begyndte i maj 2002 under navnet Quantum GIS, og det første mål var
beskedent: en fremviser til geodata. Siden er det vokset til et fuldt geografisk
informationssystem, der åbner lag fra filer, geodatabaser og webkorttjenester,
tegner dem sammen på ét kort, redigerer geometri og attributter, kører analyser
på dem og sætter resultatet op som et trykt kort, et atlas eller en rapport.

QGIS er et officielt projekt under Open Source Geospatial Foundation, udgives
under GNU General Public License, er skrevet i C++ med Qt-værktøjskassen og
kører på de fleste Unix-platforme, Windows og macOS. Der kommer en ny udgave
cirka hver fjerde måned. Hver tredje af dem, et mønster der begyndte med 2.8, er
en langtidsudgave (LTR), som vedligeholdes, indtil den næste langtidsudgave
afløser den, mens den seneste udgave får en fejlrettelse hver måned. I skrivende
stund er de to 3.44.15 og 4.2.3.

Meget af det, QGIS læser, læser det gennem andre projekter. Vektorfiler kommer
ind via GDAL-driverne, og det er grunden til, at listen over formater er så
lang. Rastre kommer samme vej. Tabeller i PostGIS, SpatiaLite, SQL Server og
Oracle læses direkte, og projektets egen funktionsliste fremhæver, at data vises
i deres eget format og deres egen projektion uden at blive konverteret til et
internt format.

Fire dele mere bliver vigtige, når et team deler QGIS.

Projektet er arbejdsenheden. En `.qgs`-fil er XML, der beskriver hvert lags
datakilde med stil, etiketter, formularer og printlayouts. En `.qgz`-fil er et
zip-arkiv, der rummer den XML sammen med en `.qgd`-fil med hjælpedata. Et
projekt kan også gemmes i en GeoPackage eller en PostgreSQL-database ved siden
af de lag, det beskriver.

Processing er analyserammen: en værktøjskasse med algoritmer fra QGIS' egen
udbyder og fra GDAL, GRASS som en udbyder mere, en modeldesigner, der kæder
algoritmer sammen til en graf, en batchgrænseflade og en historik over hver
kørsel. De samme algoritmer kører uden skrivebordet gennem
kommandolinjeværktøjet `qgis_process`:

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

PyQGIS er Python-grænsefladen bag plugins, den indbyggede konsol og selvstændige
scripts. Og QGIS Server udgiver en projektfil på nettet som standardiserede
OGC-tjenester, WMS, WFS, WCS og OGC API Features, og kører bag en webserver som
en FastCGI- eller CGI-applikation.

## Hvorfor det betyder noget

Noget geodataarbejde forbliver manuelt, uanset hvor god pipelinen er: at afgøre,
om det er et matrikelskel eller luftfotoet under det, der er forkert, at tegne
et bygningsomrids op fra en LiDAR-overflade, at gennemgå en kundes levering, før
den læses ind. Beslutningen, QGIS påvirker, er, hvilket værktøj den vurdering
foregår i, og hvad der er tilbage, når den er truffet.

Licens og platform afgør første halvdel. Der skal ikke købes pladser, og den
samme udgave kan installeres på Linux, macOS og Windows, så en konsulent,
kundens egne medarbejdere og en byggeserver kan køre præcis den version,
projektet blev lavet i. Esris kommercielle skrivebordsprogram, ArcGIS Pro, kører
kun på Windows.

Anden halvdel handler om, hvad der overlever sessionen. QGIS læser PostGIS
direkte, så en rettelse lander i den tabel, applikationen henter fra, og der er
ingen eksport at afstemme bagefter. Processing-historikken gemmer hver algoritme
med dens parametre, og hver post kan kopieres ud som en Python-kommando eller
som en `qgis_process`-kommando. En rettelse, der blev fundet frem til i hånden i
en dialogboks, kan dermed blive en linje i et script, der kører på hver levering
derefter. En projektfil kan gå endnu længere og udgives, som den er, af QGIS
Server, så den stil, nogen satte op på skrivebordet, er den stil, en webklient
får over WMS.

Omkostningerne handler mest om disciplin. Et projekt peger på data, det ikke
selv indeholder, så det er kun så flytbart som de stier, det gemmer. Valget
mellem langtidsudgaven og den seneste udgave er et reelt valg: den ene ændrer
sig langsomt, den anden kommer med nye funktioner hver fjerde måned.

## Sådan ser det ud i praksis

På dette site optræder QGIS som stedet, hvor geodata blev set efter og rettet i
hånden, ved siden af de værktøjer, der klarede det store arbejde.

Fra 2015 til 2022, i rollen som teamlead for GIS-softwareudvikling, gik
[leverancen på mere end tredive GIS-projekter](/da/portfolio/led-the-development-deployment-and-support-of-over-35/)
helt fra den første udvikling til supporten, når de var live. I de projekter
var QGIS og JOSM værktøjerne til selve dataarbejdet, mens geodataene blev gemt i
PostgreSQL med PostGIS, og GDAL/OGR flyttede data mellem shapefiler, GeoJSON,
GeoTIFF, KML og vektorfliser. Foran stod webkort bygget på Mapbox GL og Leaflet.
Opgaverne var mange slags: kort i 2D og 3D, LiDAR-data, der skulle behandles,
georektifikation og vektorisering og endelig kortlægning og navigation inden
døre.

Mellem 2022 og 2024 var rollen dataingeniør på et storstilet geospatialt
analyseprojekt, og opgaven var at finde og løse
[over 1.000 problemer i geografiske data og tidsseriedata](/da/portfolio/resolved-1-000-issues-in-geographical-data-and-7/).
QGIS var ét af tre værktøjer, der blev brugt sammen til at diagnosticere og
rette de spatiale fejl; de to andre var GDAL og ArcGIS. Oprydning, der kom igen,
blev automatiseret i Bash-scripts, PostGIS tog sig af spatiale forespørgsler og
indeksering, og arbejdet var med til at skære 35 % af køretiden for de spatiale
forespørgsler.

## Hvor det går galt

Skrivebordet får geodata til at se rigtige ud på skærmen, og det er netop der,
de fleste problemer gemmer sig.

**Et lag havner det forkerte sted.** QGIS omprojicerer løbende hvert lag til
projektets koordinatsystem, så lag i forskellige systemer lægger sig pænt oven
på hinanden, forudsat at hvert lag angiver sit eget system korrekt. En shapefil,
der kommer uden sin `.prj`-fil, angiver ikke noget, og afhængigt af en
indstilling under Options lader QGIS laget stå som ukendt, spørger efter et
system eller giver det i stilhed projektets eller et standardsystem. Rettelsen
afhænger af, hvilken fejl der er begået. Er koordinaterne rigtige, og er det kun
angivelsen, der er forkert, ændrer Assign projection eller Define projection
angivelsen og lader hvert punkt blive, hvor det er. Ligger koordinaterne faktisk
i et andet system, omregner Reproject layer dem. Find projection, i samme gruppe
i værktøjskassen, oplister de systemer, hvor lagets udstrækning ville falde oven
på et valgt område, og gør dermed et gæt til en kort liste.

**Arealer kommer ud i kvadratgrader.** Udtrykssproget har to arealfunktioner,
der ligner hinanden. `$area` følger projektets indstillinger for ellipsoide og
enhed, så med en ellipsoide valgt giver den et ellipsoidisk areal i den valgte
enhed. `area($geometry)` regner altid plant i lagets eget system og giver
systemets enheder, så på et lag gemt i længde- og breddegrader giver den
kvadratgrader, et lille decimaltal, der ser troværdigt ud i en tabel. Brug
`$area` til ethvert tal, et menneske skal læse, eller omprojicér laget til et
projiceret system, der passer til området, før der måles.

**Et projekt åbner med halvdelen af lagene borte.** Et projekt gemmer, hvor
hvert lags data ligger, ikke selve dataene. Flyt mappen, omdøb en fil eller åbn
projektet på en kollegas maskine, og de gemte stier fører ingen steder hen. QGIS
viser så dialogen Handle Unavailable Layers, og vælger man at beholde lagene,
åbner projektet med dem på listen, men uden indhold, indtil hver kilde er
repareret. Gemmer projektet stier relativt til projektfilen, en indstilling
under projektets egenskaber, kan en mappe med projekt og data flyttes som én
enhed. Til delt arbejde holder det de to sammen at gemme projektet i den samme
PostgreSQL-database eller GeoPackage som lagene.

**Den samme rettelse bliver klikket igennem igen næste måned.** En rettelse
lavet i en dialogboks efterlader data i orden og metoden i nogens hukommelse.
Næste levering med samme fejl bliver rettet i hånden igen, en smule anderledes.
Kopiér kørslen ud af Processing-historikken som en `qgis_process`-kommando,
første gang den virker, og læg den ind i det script, der læser leveringen ind.

## Læs mere

- [Foreword](https://docs.qgis.org/latest/en/docs/user_manual/preamble/foreword.html)
  — projektets egen beskrivelse af, hvad QGIS er, hvor det begyndte, og hvilken
  licens det udgives under.
- [Road Map](https://www.qgis.org/resources/roadmap/) — udgivelsescyklussen,
  hvordan langtidsudgaver vælges, og den aktuelle tidsplan.
- [Working with Projections](https://docs.qgis.org/latest/en/docs/user_manual/working_with_projections/working_with_projections.html)
  — omprojicering undervejs, og hvad QGIS gør med et lag uden koordinatsystem.
- [Working with Project Files](https://docs.qgis.org/latest/en/docs/user_manual/introduction/project_files.html)
  — formaterne `.qgs` og `.qgz`, projekter gemt i databaser og reparation af
  brudte stier.
- [Using processing from the command line](https://docs.qgis.org/latest/en/docs/user_manual/processing/standalone.html)
  — `qgis_process`, dets kommandoer og hvordan parametre gives med.
- [Introduction](https://docs.qgis.org/latest/en/docs/server_manual/introduction.html)
  — QGIS Server-manualens overblik over de tjenester, den udgiver fra et
  projekt.

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