# Terrengkategori og terrengform

> Terrengruhetskategori etter NS-EN 1991-1-4:2005/NA:2009 for et punkt, fastsatt retningsvis i 72 sektorer ut til 10 km fra Kartverkets høydemodeller, FKB-bygninger og NIBIO AR5, med overgangssoner, kontrollpunkter, terrengformfaktor c_o etter NA.4.3.3 og RIB-overstyring. JSON, PDF eller HTML. Beta.

Kilde: https://solkart.no/api/dokumentasjon/terrengkategori · Sist oppdatert 2026-09-16 · Base-URL https://api.solkart.no · OpenAPI: https://solkart.no/openapi.json

## Hva du får

Vindlastberegningen etter NS-EN 1991-1-4 trenger terrengruhetskategori (0 til IV) per vindretning. Endepunktet leser terrenget rundt punktet: høydemodeller (DOM/DTM 1 m i nærfeltet, 10 m ut til 10 km), arealbruk fra AR5 og bygningsomriss fra FKB, og fastsetter kategori i 72 rullerende 30°-sektorer etter reglene i NA, med overgangssoner (NA.4.3.2(2)), kontrollpunkter der grunnlaget ikke avgjør, og terrengform (NA.4.3.3) med c<sub>o</sub> og k<sub>I</sub> per sektor. Ansvarlig prosjekterende (RIB) kan bekrefte og overstyre per sektor, og rapporten merker det med navn og dato. Skjønnsvalgene i metoden står på [terrengkategori-siden](/terrengkategori#skjonn).

Betaversjon, gratis i pilot, uten nøkkel, begrenset til 1 per sekund og 30 per time per IP-adresse. Rapporten er et beslutningsgrunnlag som RIB kontrollerer og godkjenner.

## POST /api/terrain/category

Synkront, inntil 60 s. Bruk [jobbendepunktet](/api/dokumentasjon/jobber) i alt som ikke er interaktivt.

```bash
curl -X POST https://api.solkart.no/api/terrain/category \
  -H "Content-Type: application/json" \
  -d '{"lat": 59.2185, "lon": 10.9298, "sted": "Jegerveien 8, Fredrikstad", "akse_grader": 35}'
```

| Felt | Type | Standard | Beskrivelse |
|---|---|---|---|
| `lat`, `lon` | tall | påkrevd | 57 til 72° N, 4 til 32° Ø |
| `radius_km` | 2 til 10 | 10 | Analyseradius |
| `z_ref_m` | 0 til 200 | | Referansehøyde (byggets høyde) for overgangssoner |
| `z_ref_note` | streng ≤ 60 | | Merknad om hvor høyden kommer fra |
| `akse_grader` | 0 til 179,99 | | Byggets lengderetning; gir kategori per akse i tillegg |
| `sted` | streng ≤ 160 | | Adresse eller navn til rapporten |
| `rapport_id` | streng ≤ 40 | | Din referanse, trykkes i rapporten |
| `kart` | boolean | `false` | Legg kartlagene ved som SVG i JSON-svaret |
| `format` | `json` \| `pdf` \| `html` | `json` | Også som `?format=` |
| `overstyring` | objekt | | RIB-valg, se under |

### `overstyring`

| Felt | Beskrivelse |
|---|---|
| `rib` | Navn og firma, 2 til 120 tegn. Påkrevd når `overstyring` er med. |
| `kommentar`, `dato` | Fri tekst ≤ 1000 og dato ≤ 20 tegn |
| `sektorer[]` (≤ 13) | `{senter_grader 0–359, kategori 0–4, kommentar}`: overstyr kategori i sektoren |
| `bekreftelser[]` (≤ 14) | `{sektor_grader, kode, kommentar}`: bekreft et kontrollpunkt (`kode` er kontrollpunktets kode fra svaret) |
| `terrengform[]` (≤ 13) | `{senter_grader, type, c_o, k_I, kommentar}` med `type` ∈ `flatt`, `aas`, `skraaning`, `aas_i_le`, `le_slak`, `le_bratt`, `manuell`; `c_o` og `k_I` 0,5 til 3 (brukes ved `manuell`) |

### Svar `200` med `format=json`

Ekte svar for punktet over (forkortet: 72 sektorer, 7 kontrollpunkter og 24 regeltreff er kuttet til ett hver):

```json
{
  "sted": { "lat": 59.24, "lon": 10.9526, "utm33": [271950, 6573900] },
  "norm": "NS-EN1991-1-4:2005+NA:2009",
  "resultat": {
    "terrengkategori": "II",
    "kategori_id": 2,
    "styrende_sektor_grader": 0.0,
    "per_akse": { "35": 2, "125": 2, "215": 2, "305": 2 },
    "konfidens": 0.8,
    "krever_kontroll": true,
    "kontrollgrunner": [ "…" ],
    "fastsatt_av_rib": false,
    "c_o_maks": 1.31,
    "c_o_styrende_sektor_grader": 100.0,
    "k_I_maks": 1.0,
    "k_I_sektorer_grader": []
  },
  "kontrollpunkter": [
    { "kode": "terrengform_aas", "sektor_grader": 60.0, "sektor_label": "sektor 060°",
      "kort": "terrengform skråning, c_o = 1,21",
      "tekst": "Skråning med H = 77 m, L_H = 360 m, B = 2190 m og x = 550 m gir c_o = 1,21 etter NA.4(901.5). …",
      "risiko": "Kan gi høyere vindlast: c_o kan være høyere om en annen topp eller form velges",
      "lavere": true, "kategori_valgt": null, "kategori_mulig": null, "bekreftet": null }
  ],
  "overstyring": null,
  "sektorer": [
    { "senter_grader": 0.0, "kategori": 2, "overstyrt": null,
      "terrengform": { "type": "skraaning", "beskrivelse": "Skråning eller platåkant, stedet i øvre halvdel (NA.4.3.3(901.2), ΔS = 1,8·H/L_H)",
                       "c_o": 1.007, "k_I": 1.0, "H_m": 45.2, "L_H_m": 570, "B_m": 1410, "x_m": 2140, "phi": 0.079,
                       "z_sted_moh": 66.6, "z_topp_moh": 79.7, "z_bunn_moh": 34.5, "z_ref_m": 10.0,
                       "bratt": null, "le_slak_mulig": false, "tvinger_kategori_II": false, "merknader": [], "profil": [[-3000, 34.5], "…"] },
      "z0_m": 0.05,
      "overgangssone": { "present": true, "x_B_km": 2, "n": 2, "tc_upwind": "IV", "vm_ratio": 0.86, "direction": "avtakende", "flere": [ "…" ] },
      "baand": [
        { "km": "0–0,3", "kategori": 2, "z0_m": 0.05, "z0_morfometrisk_m": 1.0, "lambda_p": 0.0, "h_av_m": 0.0,
          "arealklasse": "forest_conif", "arealandeler": { "forest_conif": 0.989, "forest_mixed": 0.011 },
          "vannandel": 0.0, "stroklengde_vann_km": 0.0, "stroklengde_hav_km": 0.0, "haveksponering": 0.01,
          "bygningskilde": "fkb", "hoydedekning": 1.0 }
      ] }
  ],
  "regeltreff": [
    { "kode": "ung_skog_ii", "punkt": "NA.4.1 (kat. II)", "tekst": "Skog med middelhøyde under 4 m regnes som spredte objekter.",
      "grunnlag": { "h_av_m": 0.0, "band_km": "0–0,3", "ndom_dekning": 1.0 }, "sektorer": [ "…" ], "sektor_tekst": "sektorene 145–060° og 100–105°" }
  ],
  "grunnlag": {
    "hoydemodell": "Kartverket DOM1/DTM1 i 2,5 m for 0-1 km og DOM10/DTM10 i 30 m for 1-10 km (nDOM = DOM - DTM)",
    "arealdekke": "NIBIO AR5 (WMS)", "bygningskilde": "Kartverket FKB Bygning", "bygninger_antall": 1261,
    "ar5_datafangst": "28.04.1994", "ar5_alder_aar": 32, "sektorbredde_grader": 30, "sektorsteg_grader": 5,
    "referansehoyde_m": 10.0, "referansehoyde_oppgitt": false, "akse_grader": 35.0, "beregnet_sekunder": 3.5, "responstid_ms": 34031
  }
}
```

| Felt | Beskrivelse |
|---|---|
| `resultat.terrengkategori`, `kategori_id` | Styrende kategori for punktet som romertall (`0`, `I` til `IV`) og tall (0 til 4): laveste over sektorene etter NA.4.3.2(4) |
| `resultat.per_akse` | Kategori for byggets to akser og deres motsatte retninger (nøkkel = grader), når `akse_grader` er gitt |
| `resultat.konfidens` | 0 til 1, hvor godt grunnlaget avgjør |
| `resultat.krever_kontroll`, `kontrollgrunner[]`, `kontrollpunkter[]` | Punkter der usikkerheten kan gi annen kategori eller c_o og dataene ikke avgjør; hvert kontrollpunkt har `kode`, `sektor_grader`, `tekst`, `risiko` og `bekreftet`. RIB bekrefter via `overstyring.bekreftelser` med samme `kode`. |
| `resultat.c_o_maks`, `c_o_styrende_sektor_grader`, `k_I_maks` | Høyeste terrengformfaktor og turbulensfaktor over sektorene, og hvilken sektor |
| `sektorer[]` | 72 sektorer (hvert 5°, 30° brede) med `kategori` (0 til 4), ruhetslengde `z0_m`, `terrengform` (`type`, `c_o`, `k_I`, `H_m`, `L_H_m`, `B_m`, `x_m`, høyder og profil), `overgangssone` (`x_B_km`, `tc_upwind`, `vm_ratio`, `direction`) og `baand[]` per avstandsbånd med arealklasse, bebygd andel `lambda_p`, middelhøyde `h_av_m`, vannandel og strøklengder |
| `regeltreff[]` | Hvilke regler i NA som slo til, med `punkt`, `grunnlag` og sektorintervaller |
| `grunnlag` | Datakilder, oppløsning, AR5-alder, referansehøyde og beregningstid |

`format=pdf` gir rapporten som `application/pdf` (`Content-Disposition` med filnavn), `html` som HTML; begge med hodene `X-Terrengkategori` og `X-Konfidens` (JSON-svaret har verdiene i `resultat`). Alle svar er `Cache-Control: private, no-store`.

## I kø: POST /api/terrain/jobs

Samme kropp. Svar `202` med `jobb_id`, `status`, `posisjon`, `estimert_sekunder`; status på `GET /api/terrain/jobs/{id}`; fil på `GET /api/terrain/jobs/{id}/fil` når `status` er `done` og formatet er `pdf` eller `html`. Resultatene lever i 15 minutter. Se [asynkrone jobber](/api/dokumentasjon/jobber) for hele flyten med kode.

## Eksempel: RIB bekrefter og overstyrer

```bash
curl -X POST https://api.solkart.no/api/terrain/jobs \
  -H "Content-Type: application/json" \
  -d '{
    "lat": 59.2185, "lon": 10.9298, "sted": "Jegerveien 8, Fredrikstad", "z_ref_m": 9, "format": "pdf",
    "overstyring": {
      "rib": "Kari Nordmann, Nordmann Bygg AS", "dato": "2026-09-15",
      "kommentar": "Befaring 12.09: ny bebyggelse sør for tomta er ikke i FKB ennå.",
      "sektorer": [ { "senter_grader": 180, "kategori": 3, "kommentar": "Rekkehus ferdigstilt 2026" } ],
      "bekreftelser": [ { "sektor_grader": 240, "kode": "vann_strok_240", "kommentar": "Kontrollert mot kart" } ],
      "terrengform": [ { "senter_grader": 120, "type": "aas" } ]
    }
  }'
```

Rapporten viser overstyringene med RIB-navn, dato og kommentar, og markerer sektorene som fastsatt av RIB.

## Feil

| Status | `code` | `error` |
|---|---|---|
| `400` | `INVALID_INPUT` | `lat må være et tall mellom 57 og 72.`, `radius_km må være mellom 2 og 10.`, `z_ref_m må være mellom 0 og 200.`, `akse_grader må være mellom 0 og 179.`, `overstyring.rib må oppgis (navn og firma).`, `overstyring.sektorer: senter_grader 0–359 og kategori 0–4.`, `format må være én av: json, pdf, html.` |
| `422` | `NO_COVERAGE` | `Ingen datadekning for dette punktet (høydemodell mangler).` |
| `429` | `RATE_LIMITED` | Over 1/s eller 30/time; `Retry-After` |
| `503` | `BACKEND_BUSY` | `Terrengkategori-tjenesten er opptatt. Prøv igjen.` (`Retry-After` = anslått ventetid i sekunder, 30 når anslag mangler) |
| `504` | `BACKEND_TIMEOUT` | `Analysen brukte mer enn 60000 ms.` Bruk jobbendepunktet. |
| `502` | `BACKEND_ERROR` | Beregningstjeneren svarte feil |

## Datagrunnlag

Kartverket DOM og DTM 1 m (nærfelt 0 til 1 km) og DTM 10 m (ut til 10 km), Kartverket FKB-bygninger (omriss og høyde), NIBIO AR5 arealressurskart, og ortofoto til rapportens kart. Metoden og skjønnsvalgene, inkludert strøklengde over vann, kategori IV-kriteriene og terrengform etter NA.4(901.5), er beskrevet på [solkart.no/terrengkategori](/terrengkategori#skjonn).
