Metode — Grå arealer og næringsaktivitet

Sist oppdatert: 20. februar 2026

Hva handler dette om?

Norske byer og tettsteder inneholder store arealer med asfalt, betong og andre «grå» overflater — parkeringsplasser, veier, industriområder, kjøpesentre. Noen av disse arealene er intensivt brukt og viktige for næringslivet. Andre ligger brakk eller brukes langt under potensialet.

Spørsmålet vi prøver å besvare er: Hvor mye økonomisk aktivitet foregår egentlig på hvert grå areal?

For å finne ut av det kobler vi to typer data som normalt lever i helt forskjellige verdener:

  1. Geodata — polygoner som viser nøyaktig hvor de grå arealene ligger, hvor store de er, og hva de inneholder (bygninger, vei, parkering).
  2. Regnskapsdata — omsetning, verdiskaping og ansatte for hver avdeling (underenhet i Enhetsregisteret) i Norge.

Koblingen skjer romlig: vi plasserer avdelingene på kartet basert på beliggenhetsadressen deres, og sjekker hvilke som befinner seg innenfor hvert grå polygon. Resultatet er et kart der hvert grå areal har fått en økonomisk merkelapp.

Denne første versjonen dekker Østfold — 12 kommuner, 148 728 polygoner, 269 km² grått areal.

Hva kan dette brukes til?

Pipeline-oversikt Figur 1: Datapipeline fra kilde til kart. Oransje = inndata, rødt = prosessering, grønt = resultat, lilla = live-beregninger.


Del 1: Datagrunnlaget

Kart over grå arealer (Miljødirektoratet, Kartverket, NIBIO og SSB)

Kilden for arealgeometrien er «Kart over grå arealer» versjon 1, levert som GeoPackage (432 MB). Datasettet inneholder to lag:

Lag Antall Beskrivelse
GraastrukturFlate 148 728 Detaljerte polygoner — hvert enkelt grå areal
GraaArealFlate 16 108 Aggregerte oversiktsflater (brukes kun som kartlag ved lav zoom)

Hvert polygon i GraastrukturFlate har disse egenskapene:

Egenskap Eksempel Forklaring
komid 3105 Kommunekode (2024-format)
areal_m2 2 751 Polygonareal i kvadratmeter
arealdekke Bebygd Fysisk overflate: Bebygd, Samferdsel, Konstruksjon
arealbruk_hovedklasse Boligbebyggelse Planlagt bruk: TransportTelek, NæringTjeneste, osv.
andelgraa 63.0 Prosent grå overflate (0–100)
andelgron 37.0 Prosent grønn overflate (0–100)
andelbygg 40.0 Prosent bygningsfotavtrykk (0–100)

Koordinatsystem er UTM sone 33N (EPSG:25833).

Polygon-fordeling Figur 2: Til venstre — størrelsesfordeling av polygoner (logaritmisk x-akse). Medianpolygonet er 500 m², men snittet er 1 808 m² — noen få store industri- og samferdselsarealer drar opp. Til høyre — arealsammensetning per polygon. «Grått» (tett overflate) og «grønt» (permabel overflate) er en fullstendig klassifisering av bakken — de summerer alltid til 100 %. «Bygninger» er en separat måling av bygningsfotavtrykk sett ovenfra, uavhengig av overflaten under. 63 % av polygonene har ingen bygning — disse er typisk veier, parkeringsplasser og annen infrastruktur.

SSB 250-meter rutenett

Statistisk sentralbyrå (SSB) publiserer statistikk på et fast rutenett med 250 × 250 meter celler. Vi bruker to datasett:

Datasett Celler Nøkkelkolonne Beskrivelse
Bedrifter 2026 133 000 emp_tot (ansatte), est_tot (bedrifter) Registrerte arbeidsplasser per celle
Befolkning 2025 224 000 pop_tot (innbyggere) Bosatte per celle

Begge er i EPSG:32633 (UTM sone 33N, en variant av UTM33 som dekker hele Norge). Merk at dette er et annet koordinatsystem enn arealpolygonene — de må transformeres før de kan kobles romlig.

Enhetsregisteret (Brønnøysund)

Brønnøysundregistrenes åpne data inneholder alle norske foretak og underenheter (avdelinger) med adresser:

Register Antall Adressetype
Enhetsregisteret (foretak) ~1,15 millioner Forretningsadresse (hovedkontor)
Underenheter (avdelinger) ~831 000 Beliggenhetsadresse (fysisk lokasjon)

Vi bruker avdelinger med beliggenhetsadresse, ikke foretak med forretningsadresse. Forskjellen er viktig: et foretak med hovedkontor i Oslo kan ha en fabrikk i Sarpsborg. Vi vil vite hva som skjer fysisk på hvert areal, ikke hvor hovedkontoret ligger.

Regnskapsdata (Menon Economics)

Menon Economics’ regnskapsdatabase kobler avdelinger med regnskapstall for 2024:

Variabel Enhet Definisjon
oms_avd2024 1 000 NOK Omsetning fordelt på avdeling
vs_avd2024 1 000 NOK Verdiskaping = driftsresultat + lønnskostnader
ans_avd2024 Antall Ansatte ved avdelingen

Verdiskaping er et mål på avdelingens bidrag til BNP — det som betales ut i lønn til ansatte pluss det som blir igjen som overskudd til eierne. Det er et mer presist mål på økonomisk aktivitet enn omsetning, fordi omsetning inkluderer kjøpte varer og tjenester som bare «passerer gjennom».

Vi filtrerer på status_oms_ans_avd2024 = 'ANSATTE OG OMSETNING' for å kun inkludere avdelinger med gyldig regnskap og registrerte ansatte (ca. 140 000 avdelinger).

Matrikkelens adresseregister (Kartverket)

For å plassere avdelingene på kartet trenger vi koordinater for norske adresser. Kartverkets adresseregister inneholder adressenavn, husnummer, postnummer og UTM33-koordinater (Nord, Øst) for alle offisielle matrikkeladresser.


Del 2: Geocoding — fra adresse til punkt

Geocoding er prosessen med å oversette en tekstadresse til et punkt på kartet. Dette er et kritisk steg, fordi kvaliteten her avgjør om en avdeling havner i riktig polygon.

Metode

For hver avdeling i Brønnøysundregisteret:

  1. Parse adressen. Beliggenhetsadressen (f.eks. «Strandgata 21B, 1712 Grålum») splittes i adressenavn, nummer, bokstav og postnummer. Adresser som starter med «Postboks» eller «c/o» forkastes — de er ikke fysiske adresser.

  2. Eksakt matching. Vi slår opp i Kartverkets adresseregister: adressenavn + nummer + postnummer. Hvis flere matrikkelenheter matcher (f.eks. et bygg med flere innganger), bruker vi gjennomsnittskoordinaten.

  3. Fallback: postnummer-sentroid. Avdelinger uten eksakt treff får koordinaten til midtpunktet av postnummeret sitt. Disse markeres som «centroid» — presisjonen er for lav til å bruke dem direkte.

  4. Ingen match. Avdelinger uten verken adresse eller postnummer markeres som «ingen».

Re-geocoding av centroid-matcher

Mange centroid-matcher skyldes ikke manglende adresse, men at adressefeltet i Brønnøysundregisteret inneholder tilleggsinfo («3. etasje», «v/OBOS») i stedet for selve gateadressen. Vi oppdaget dette da polygon #80743 i Fredrikstad (Brynild-fabrikken) viste 276 ansatte fra SSB men 0 avdelinger fra regnskap: produksjonsavdelingen hadde adresse «Mosseveien 1-3» som ikke matchet matrikkelen, mens underavdelingene med eksakt match hadde null regnskapsdata.

For å rette dette kjører vi et ekstra geocoding-steg:

  1. BRREG-oppslag. For alle 48 822 centroid-avdelinger henter vi den fullstendige beliggenhetsadressen fra Enhetsregisteret. BRREG returnerer adresselinjer som en liste — f.eks. ["Spaces Nydalen", "Nydalsveien 33"] — der siste linje ofte er den egentlige gateadressen.

  2. Adresseparsing. Vi plukker siste linje med gatenummer, normaliserer bindestreksadresser («Mosseveien 1-3» → «Mosseveien 1»), og forkaster linjer som bare er etasje/seksjon/bolignummer.

  3. Kartverket-oppslag. Den parsede adressen geocodes mot Kartverkets adresse-API (ws.geonorge.no/adresser/v1). Tjenesten er åpen og krever ingen registrering.

Resultatet:

match_type Antall Beskrivelse
eksakt 666 803 Opprinnelig eksakt match mot matrikkelen
kartverket 32 433 Re-geocodet via BRREG → Kartverket
centroid 16 389 Fortsatt postnummer-sentroid (ikke geocodbar)
ingen 12 206 Ingen adressedata

De 16 389 gjenværende centroid-matchene har adresser som hverken BRREG eller Kartverket kan løse til en presis koordinat — typisk stedsnavn uten gatenummer («Melkøya», «Mo Industripark»), forvaltningsadresser («v/OBOS Eiendomsforvaltning AS»), eller skrivemåter som avviker fra matrikkelen. Disse ekskluderes fra polygon-koblingen.

Geocoding-kvalitet Figur 3: Geocoding-kvalitet for 727 831 avdelinger. 91,6 % får eksakt adressematch i første runde. Etter re-geocoding via BRREG og Kartverket øker andelen med presise koordinater til 96,1 %.

Hva betyr dette for resultatene?

De 3,9 % avdelingene uten presis match (centroid + ingen) faller ut av polygon-analysen. Vi vurderer dette som akseptabelt:


Del 3: Aktivitetsmålet — hva fargen betyr

Hvert grå polygon på kartet er farget etter et aktivitetsmål som kombinerer nærhet til arbeidsplasser og beboere. Tanken er enkel: et grå areal omgitt av mange mennesker og arbeidsplasser er sannsynligvis i aktiv bruk, mens et areal uten noen i nærheten kan være en kandidat for grønning eller omdisponering.

Beregning

Aktivitetsmålet bygges opp i tre steg:

Steg 1 — Bygg aktivitetstall per SSB-celle:

For hver 250-meter celle beregnes:

aktivitet = ansatte_i_cellen + befolkning_i_cellen

Det er en uvektet sum. En celle med 100 ansatte og 50 beboere får aktivitet = 150. Ingen vekting av ansatte vs. beboere — begge teller likt.

Steg 2 — Koble celler til polygoner (spatial join):

SSB-cellene (EPSG:32633) transformeres til samme koordinatsystem som polygonene (EPSG:25833). Deretter finner vi alle celler som overlapper med hvert polygon via ST_Intersects.

Steg 3 — Aggreger til polygon:

Hvert polygon får MAX (ikke SUM) av aktivitetstallene fra alle overlappende celler.

polygon_aktivitet = MAX(aktivitet) over alle overlappende 250m-celler

Spatial join-illustrasjon Figur 4: Hvordan de tre geometriene forholder seg til hverandre. SSB-rutene (oransje, stiplet) har aktivitetstall. Blå prikker er geocodede avdelinger. Polygonet (grått) overlapper flere ruter — den høyeste verdien (203) blir polygonets aktivitetsscore. Avdelingen utenfor polygonet telles ikke.

Hvorfor MAX og ikke SUM?

Et polygon kan krysse 2–4 SSB-celler. Cellene kan ha svært ulike verdier — én celle kan dekke et boligområde (høy befolkning), den neste et jorde (null). Å summere ville gitt et tall som avhenger av hvor mange celler polygonet tilfeldigvis overlapper med, noe som er en geometrisk artefakt, ikke et meningsfullt mål. MAX gir et robust svar på spørsmålet: «Hva er det høyeste aktivitetsnivået i polygonets umiddelbare nærhet?»

Fargeskala i kartet

Score Farge Tolkning
0 Rød Ingen registrert aktivitet — mulig grønningskandidat
1–5 Oransje Svak aktivitet
5–20 Gul Moderat aktivitet
20–50 Lysgrønn Godt utnyttet
50–200 Grønn Høy aktivitet
200+ Mørkgrønn Svært høy intensitet

Aktivitetsfordeling Figur 5: Til venstre — fordeling av aktivitetsscore. Fargene matcher kartets fargeskala. Til høyre — 16,5 % av polygonene har null aktivitet (ingen ansatte eller beboere i overlappende SSB-celler). Disse er kandidater for nærmere undersøkelse.


Del 4: Regnskapskoblingen — avdelinger på arealet

Mens aktivitetsmålet gir et bilde av nærhet til mennesker, gir regnskapskoblingen et direkte svar: Hvilke avdelinger holder til fysisk innenfor polygonet, og hvor mye omsetter de for?

Metode

  1. Avdelinger med presis geocoding — eksakt match eller re-geocodet via Kartverket (Del 2) — kobles med regnskapstall for 2024 via organisasjonsnummer.
  2. Hvert avdelings-punkt sjekkes mot alle 148 728 polygoner: ST_Contains(polygon, punkt) — punktet må ligge innenfor polygonet, ikke bare tangere kanten.
  3. Per polygon aggregeres: antall avdelinger, total omsetning, total verdiskaping, totalt ansatte.
  4. Omsetningsintensitet beregnes: oms_per_m2 = SUM(omsetning) × 1 000 / polygonareal_m² (NOK per kvadratmeter).

Et viktig skille

Merk forskjellen mellom de to målene:

Aktivitet (Del 3) Regnskap (Del 4)
Kilde SSB 250m rutenett Brønnøysund + Menon
Oppløsning 250 × 250 m celle Punktnøyaktig (adresse)
Mål Nærhet til mennesker Avdelinger innenfor polygonet
Aggregering MAX over overlappende celler SUM over inneholdte avdelinger
Geometri ST_Intersects (overlapp) ST_Contains (innenfor)
Dekning 83,5 % av polygoner 2,9 % av polygoner

Aktivitetsmålet fanger opp alt grå areal som ligger i nærheten av folk — inkludert veier og parkeringsplasser uten egne avdelinger. Celler med kun befolkning (ingen registrerte avdelinger) bidrar også: et boligfelt uten næringslokaler gir likevel aktivitetsscore. Regnskapsmålet er mye smalere: bare polygoner med avdelinger fysisk innenfor sine grenser får en verdi.

Regnskapsdekning Figur 6: Til venstre — kun 4 251 av 148 728 polygoner (2,9 %) inneholder avdelinger. Til midten — de fleste polygonene med avdelinger har bare 1–2 stykker. Til høyre — omsetningsintensiteten (NOK/m²) varierer over fire størrelsesordener, med en median på ca. 2 000 NOK/m².

Regnskap-laget i kartet

Regnskap-laget farger polygonene etter omsetning per kvadratmeter:

NOK/m² Farge Tolkning
0 Lys blå Ingen avdeling — vei, parkering, grøntareal
0–2 Blå → indigo Marginal omsetning (under median)
2–10 Indigo Moderat omsetning (median–P75)
10–50 Lilla Høy omsetning (P75–P90)
50+ Mørk lilla Svært høy intensitet (topp 10 %)

Breakpoints er satt etter faktisk datafordeling: median = 2 NOK/m², P75 = 10, P90 = 23, P95 = 39. Kun 4 251 av 148 728 polygoner (2,9 %) har avdelinger.


Del 5: Koordinatsystemer

Et gjennomgående teknisk tema er at datakildene bruker ulike koordinatsystemer. Feil her gir polygoner som ikke overlapper korrekt — noe som ville ødelagt alle spatial joins.

Datakilde Kilde-CRS Beskrivelse
NIBIO polygoner EPSG:25833 UTM sone 33N (meter, nordlig Norge-optimert)
SSB rutenett EPSG:32633 UTM sone 33N (annen definisjon, samme projeksjon)
Kartverkets adresser EPSG:25833 UTM sone 33N
Kartvisualisering EPSG:4326 Lengde-/breddegrad (WGS84, standard for webkart)

Alle spatial joins gjøres i EPSG:25833. SSB-data transformeres først. Resultatet transformeres til EPSG:4326 for visning i kartet. En viktig detalj: DuckDBs ST_Transform returnerer koordinater i EPSG-standard rekkefølge (breddegrad, lengdegrad), mens GeoJSON krever (lengdegrad, breddegrad) — vi bruker ST_FlipCoordinates() for å bytte om.


Del 6: Fra data til kartfliser

Rå geodata (GeoPackage-filer på 432+ MB) kan ikke sendes direkte til nettleseren. Vi konverterer dem til PMTiles — et format optimert for kartvisning der nettleseren kun laster geometrien for det aktuelle kartutsnittet og zoomnivået.

Prosessen har to steg:

  1. ogr2ogr (GDAL) — leser GeoPackage, transformerer koordinatsystem til EPSG:4326, og skriver GeoJSON.
  2. tippecanoe (Mapbox) — bygger vektor-tiles i flere zoomnivåer, med intelligent forenkling av geometri.

For aktivitet-tilesetet (som inneholder både SSB-aktivitet og regnskapsdata) gjøres dette i én sammenhengende pipeline: DuckDB gjør alle spatial joins og skriver GeoJSON direkte til tippecanoe via stdout.

Et nøkkelflagg er -preserve_fid: uten dette mister vi koblingen mellom polygon i tiles og polygon i databasen, noe som gjør klikk-oppslag umulig.


Del 7: Hva skjer når brukeren klikker?

Kartet har to typer data: pre-beregnet (bakt inn i tiles) og live (beregnet i sanntid).

Pre-beregnet (i aktivitet.pmtiles): - Aktivitetsscore, ansatte, bedrifter, befolkning (fra SSB) - Antall avdelinger, omsetning, verdiskaping, ansatte, oms/m² (fra regnskap)

Live (DuckDB-oppslag når brukeren klikker): - Polygon-detaljer (kommune, arealdekke, arealbruk, andeler) — fra GeoPackage - SSB-celle highlight — beregnet matematisk fra polygon-sentroid, uten filoppslag - Liste over individuelle avdelinger innenfor polygonet — spatial join i sanntid

SSB-cellen beregnes analytisk: polygon-sentroidens UTM33-koordinater rundes ned til nærmeste 250-meter (floor(x/250) × 250), og rute-geometrien konstrueres. Ingen filoppslag er nødvendig fordi SSB-rutenettet har fast geometri.


Del 8: Geografisk dekning

Denne versjonen dekker Østfold — 12 kommuner etter 2024-kommuneinndelingen.

Kommune-sammenligning Figur 7: Grått areal per kommune — absolutt (km²) og som andel av kommunens totalareal. Fredrikstad og Sarpsborg har mest grått areal i absolutte tall. Prosenten viser hvor mye av kommunearealet som er klassifisert som grått.

Kommunekodene i NIBIO-datasettet bruker 2024-format, mens kommunegrensene fra SSB bruker 2019-format. Kommunesammenslåinger (f.eks. Trøgstad + Spydeberg + Askim + Eidsberg + Hobøl → Indre Østfold) håndteres via en eksplisitt kode-mapping.


Del 9: Kjente begrensninger

Tidsmismatch

Kildene har ulike referansetidspunkter:

Data Referansetidspunkt Merknad
Grå arealstruktur (NIBIO) 2025 Kart over grå arealer, versjon 1 (publisert desember 2025). Samarbeid mellom Miljødirektoratet, Kartverket, NIBIO og SSB.
SSB bedrifter (est_tot) ca. januar 2026 Virksomhetsstatistikk på rutenett, nedlastet februar 2026
SSB sysselsatte (emp_tot) november 2024 Registerbasert sysselsetting, 4. kvartal 2024 (publisert februar 2025). Referanseuke: uken med 16. november.
SSB befolkning 1. januar 2025 Befolkningsstatistikk på rutenett
Regnskap 2024 Regnskapsåret 2024 (Menon Economics’ regnskapsdatabase)
Brreg-registre februar 2026 Enhetsregisteret, nedlastet februar 2026

SSBs rutenettstatistikk for bedrifter inneholder både bedriftstall og sysselsettingstall med ulike referansetidspunkter. En bedrift som la ned i 2025 kan fortsatt ha 2024-regnskapstall men mangle i bedriftsregisteret, eller omvendt.

Geocoding-bias

Avdelinger uten presis adressematch (3,9 %) faller ut. Etter re-geocoding via BRREG/Kartverket er de gjenværende primært avdelinger på stedsnavn uten matrikkeladresse (industriparker, flyplasser, fiskeoppdrett). Disse representerer en viss systematisk skjevhet mot industri- og primærnæring.

MAX-aggregering for aktivitet

Et polygon langs en motorvei kan «arve» høy aktivitetsscore fra et tilgrensende boligfelt, selv om selve polygonet er en tom parkeringsplass. MAX gir «hva skjer i nærheten», ikke «hva skjer på dette spesifikke arealet».

Avdelings-regnskap

Omsetning og verdiskaping fordelt på avdeling kan være estimert av Menon Economics (basert på ansattfordeling) — ikke nødvendigvis faktisk regnskapsført omsetning på den fysiske lokasjonen.

Kun Østfold

Resultater kan ikke generaliseres til hele Norge uten å kjøre pipeline på nye regioner. Skalering krever nye GeoPackage-leveranser fra NIBIO.


Vedlegg: Reproduserbarhet

Hele pipelinen kan reproduseres med:

# Forutsetning: data-filene ligger i data/
make setup          # Installer Python-avhengigheter
make tiles          # Generer alle kartfliser (krever ogr2ogr + tippecanoe)
make dev            # Start utviklingsserver på port 8000

Plotene i dette dokumentet regenereres med:

uv run python -u docs/generate_method_plots.py