Sist oppdatert: 20. februar 2026
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:
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.
Figur
1: Datapipeline fra kilde til kart. Oransje = inndata, rødt =
prosessering, grønt = resultat, lilla = live-beregninger.
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).
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.
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.
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.
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).
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.
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.
For hver avdeling i Brønnøysundregisteret:
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.
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.
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.
Ingen match. Avdelinger uten verken adresse eller postnummer markeres som «ingen».
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:
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.
Adresseparsing. Vi plukker siste linje med gatenummer, normaliserer bindestreksadresser («Mosseveien 1-3» → «Mosseveien 1»), og forkaster linjer som bare er etasje/seksjon/bolignummer.
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.
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 %.
De 3,9 % avdelingene uten presis match (centroid + ingen) faller ut av polygon-analysen. Vi vurderer dette som akseptabelt:
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.
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
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.
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?»
| 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 |
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.
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?
ST_Contains(polygon, punkt) — punktet må ligge
innenfor polygonet, ikke bare tangere kanten.oms_per_m2 = SUM(omsetning) × 1 000 / polygonareal_m² (NOK
per kvadratmeter).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.
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 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.
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.
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:
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.
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.
Denne versjonen dekker Østfold — 12 kommuner etter 2024-kommuneinndelingen.
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.
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.
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.
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».
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.
Resultater kan ikke generaliseres til hele Norge uten å kjøre pipeline på nye regioner. Skalering krever nye GeoPackage-leveranser fra NIBIO.
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 8000Plotene i dette dokumentet regenereres med:
uv run python -u docs/generate_method_plots.py