# QGIS

## Hva det er

QGIS er et skrivebordsprogram for å se på, redigere og analysere kartdata.
Prosjektet startet i mai 2002 under navnet Quantum GIS, og det første målet var
beskjedent: et program for å vise romlige data. Siden har det vokst til et fullt
GIS som åpner lag fra filer, romlige databaser og karttjenester på nettet,
tegner dem sammen på ett kart, redigerer geometrien og attributtene deres,
kjører analyser på dem og setter resultatet opp som et trykt kart, et atlas
eller en rapport.

Det er et offisielt prosjekt under Open Source Geospatial Foundation, utgitt
under GNU General Public License, skrevet i C++ på verktøysettet Qt, og det
kjører på de fleste Unix-plattformer, Windows og macOS. En ny utgivelse kommer
omtrent hver fjerde måned. Hver tredje av dem, et mønster som begynte med 2.8,
er en langtidsutgivelse som vedlikeholdes til neste langtidsutgivelse tar over,
mens den nyeste utgivelsen får en feilrettingsutgivelse hver måned. Når dette
skrives, er det 3.44.15 og 4.2.3.

QGIS leser mye gjennom andre prosjekter. Vektorfiler kommer inn gjennom
driverne i GDAL, og det er derfor listen over formater programmet åpner, er så
lang. Rasterdata kommer inn på samme måte. Tabeller i PostGIS, SpatiaLite, SQL
Server og Oracle leses der de ligger, og prosjektets egen liste over funksjoner
understreker at dataene vises i sitt eget format og sin egen projeksjon, uten
konvertering til et internt format.

Fire deler til betyr noe når et team deler QGIS.

Prosjektet er arbeidsenheten. En `.qgs`-fil er XML som lister opp datakilden til
hvert lag, med stil, etiketter, attributtskjemaer og utskriftsoppsettene. En
`.qgz`-fil er et zip-arkiv som holder den XML-en sammen med en `.qgd`-fil med
hjelpedata. Et prosjekt kan også lagres inne i en GeoPackage eller en
PostgreSQL-database, ved siden av lagene det beskriver.

Processing er rammeverket for analyse: en verktøykasse med algoritmer fra QGIS'
egen leverandør og fra GDAL, med GRASS tilgjengelig som en ekstra leverandør, en
modelldesigner som kjeder algoritmer sammen til en graf, et grensesnitt for
batchkjøring og en historikk over hver kjøring. De samme algoritmene kjører uten
skrivebordet gjennom et kommandolinjeverktøy, `qgis_process`:

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

PyQGIS er Python-grensesnittet bak tillegg, den innebygde konsollen og
frittstående skript. Og QGIS Server publiserer en prosjektfil på nettet som
standardiserte OGC-tjenester, WMS, WFS, WCS og OGC API Features, og kjører bak
en webserver som et FastCGI- eller CGI-program.

## Hvorfor det er viktig

Noe romlig arbeid forblir manuelt, uansett hvor god pipelinen er: å avgjøre om
det er grensen for en eiendom som er feil, eller flyfotoet under den, å tegne
omrisset av en bygning fra en LiDAR-overflate, eller å se over en leveranse fra
en kunde før den lastes inn. Beslutningen QGIS påvirker, er hvilket verktøy den
vurderingen gjøres i, og hva som blir liggende igjen etter at den er gjort.

Lisens og plattform avgjør den første halvdelen. Det finnes ingen plass å kjøpe,
og den samme utgivelsen installeres på Linux, macOS og Windows, så en
underleverandør, kundens egne ansatte og en byggeserver kan alle kjøre den
versjonen prosjektet ble laget i. Esris kommersielle skrivebordsprogram, ArcGIS
Pro, kjører bare på Windows.

Den andre halvdelen handler om hva som overlever økten. QGIS leser PostGIS
direkte, så en redigering havner i tabellen applikasjonen serverer fra, og det
finnes ingen eksport å avstemme senere. Processing-historikken registrerer hver
algoritme med parameterne sine, og hver oppføring kan kopieres ut som en
Python-kommando eller som en `qgis_process`-kommando. En rettelse som ble funnet
ut for hånd i en dialogboks, kan bli en linje i et skript som kjører på hver
leveranse etterpå. En prosjektfil kan gå enda lenger og serveres slik den er av
QGIS Server, så stilen en person satte opp på skrivebordet, er den stilen en
webklient får over WMS.

Kostnadene handler mest om disiplin. Et prosjekt peker på data det ikke
inneholder, så det er bare så flyttbart som stiene det lagrer. Valget mellom
langtidsutgivelsen og den nyeste utgivelsen er et reelt valg: den ene endrer seg
sakte, den andre kommer med nye funksjoner hver fjerde måned. For dere som
deler prosjekter, lønner det seg å velge én av dem i fellesskap.

## Slik ser det ut i praksis

På dette nettstedet dukker QGIS opp som stedet der romlige data ble sett på og
reparert for hånd, ved siden av verktøyene som tok hovedmengden av arbeidet.

Fra 2015 til 2022 hadde rollen som teamleder for utvikling av GIS-programvare
ansvaret for
[leveransen av mer enn tretti GIS-prosjekter](/nb/portfolio/led-the-development-deployment-and-support-of-over-35/),
fra utvikling gjennom produksjonssetting til driftsstøtte etter lansering. QGIS
og JOSM var verktøyene for selve dataarbeidet. Rundt dem sto resten av stakken:
PostGIS på PostgreSQL for de romlige dataene, GDAL/OGR for å flytte dem mellom
shapefiler, GeoJSON, GeoTIFF, KML og vektorfliser, og webkart på Mapbox GL og
Leaflet foran. Prosjektene favnet digital kartlegging i 2D og 3D,
LiDAR-behandling, georektifisering og vektorisering, og de nådde helt til
kartlegging og navigasjon innendørs.

I et storskala prosjekt for geospatial analyse fra 2022 til 2024 var
dataingeniørens jobb å finne og rette
[over 1 000 problemer i geografiske data og tidsseriedata](/nb/portfolio/resolved-1-000-issues-in-geographical-data-and-7/).
QGIS var ett av tre verktøy for de romlige feilene, brukt i kombinasjon med GDAL
og ArcGIS, mens Bash-skript tok seg av den datavasken som stadig kom tilbake.
PostGIS tok seg av de romlige spørringene og indekseringen, og arbeidet bidro
til 35 % kortere kjøretid for romlige spørringer.

## Hvor det går galt

Skrivebordet får romlige data til å se riktige ut på skjermen, og det er der det
meste av trøbbelet gjemmer seg.

**Et lag havner på feil sted.** QGIS projiserer hvert lag om i farten til
prosjektets koordinatreferansesystem (CRS), så lag i forskjellige systemer
legger seg pent oppå hverandre, forutsatt at hvert lag oppgir sitt eget system
riktig. En shapefil som kommer uten `.prj`-filen sin, oppgir ingen, og avhengig
av en innstilling under Options lar QGIS den stå som ukjent, ber om et system,
eller bruker i stillhet prosjektets system eller et standardsystem. Reparasjonen
avhenger av hvilken feil som ble gjort. Når koordinatene er riktige og bare
merkelappen er feil, endrer Assign projection eller Define projection
merkelappen og lar hvert punkt ligge der det er. Når koordinatene virkelig er i
et annet system, konverterer Reproject layer dem. Find projection, i samme
gruppe i verktøykassen, lister opp systemene der utstrekningen til et lag ville
falle over et valgt område, og gjør en gjetning om til en kort liste.

**Arealer kommer ut i kvadratgrader.** Uttrykksspråket har to arealfunksjoner
som ser like ut. `$area` følger prosjektets innstillinger for ellipsoide og
enhet, så med en ellipsoide valgt returnerer den et ellipsoidisk areal i den
valgte enheten. `area($geometry)` er alltid plant i lagets eget system og
returnerer det systemets enheter, så på et lag som er lagret i lengde- og
breddegrad, returnerer den kvadratgrader, et lite desimaltall som ser troverdig
ut i en tabell. Bruk `$area` for hvert tall en person skal lese, eller projiser
laget om til et projisert system som passer for området, før du måler.

**Et prosjekt åpnes med halvparten av lagene borte.** Et prosjekt lagrer hvor
dataene til hvert lag ligger, ikke selve dataene. Flytt mappen, gi en fil nytt
navn eller åpne prosjektet på maskinen til en kollega, og de lagrede stiene
slutter å peke noe sted. QGIS viser da dialogboksen Handle Unavailable Layers.
Velger du å beholde dem, åpnes prosjektet med lagene oppført, men uten at de
tegner noe før hver kilde er reparert. Å lagre stiene relativt til
prosjektfilen, en egenskap ved prosjektet, lar en mappe med prosjekt og data
flyttes som én enhet. Til delt arbeid holder det de to sammen å lagre
prosjektet i den samme PostgreSQL-databasen eller GeoPackage-filen som lagene.

**Den samme rettelsen klikkes gjennom på nytt neste måned.** En rettelse gjort i
en dialogboks etterlater riktige data og metoden i hukommelsen til én person.
Neste leveranse med den samme feilen rettes for hånd igjen, litt annerledes.
Kopier kjøringen ut av Processing-historikken som en `qgis_process`-kommando
første gang den virker, og legg den inn i skriptet som laster inn leveransen.

## Les mer

- [Foreword](https://docs.qgis.org/latest/en/docs/user_manual/preamble/foreword.html)
  — prosjektets egen fortelling om hva QGIS er, hvor det startet, og lisensen
  det er utgitt under.
- [Road Map](https://www.qgis.org/resources/roadmap/) — utgivelsessyklusen,
  hvordan langtidsutgivelser velges, og den gjeldende planen.
- [Working with Projections](https://docs.qgis.org/latest/en/docs/user_manual/working_with_projections/working_with_projections.html)
  — omprojisering i farten, og hva QGIS gjør med et lag som mangler
  koordinatsystem.
- [Working with Project Files](https://docs.qgis.org/latest/en/docs/user_manual/introduction/project_files.html)
  — formatene `.qgs` og `.qgz`, prosjekter lagret i databaser, og reparasjon av
  brutte stier.
- [Using processing from the command line](https://docs.qgis.org/latest/en/docs/user_manual/processing/standalone.html)
  — `qgis_process`, kommandoene og hvordan parametere sendes inn.
- [Introduction](https://docs.qgis.org/latest/en/docs/server_manual/introduction.html)
  — oversikten i håndboken for QGIS Server over tjenestene den publiserer fra et
  prosjekt.

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