# Takanalyse

> Modulplassering, antall moduler og kWp for et tak fra bygningsomriss (FKB), høydemodell 1 m og flyfoto med SunPoint bildeanalyse. Skråtak og flate tak, øst/vest eller sør, avstander etter NEK 400-7-712, tegning som PNG og GeoJSON. Krever avtale.

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

## Hva du får

Gi et punkt på et bygg, så finner tjenesten bygningen i FKB, leser takflater, helning og hindringer fra høydemodellen (DOM 1 m) og flyfoto (SunPoint bildeanalyse), og plasserer moduler etter regler for kantavstand, gangbaner, hindringer, skygge og snøsoner. Svaret er antall moduler, kWp, takflater med retning og helning, tegning og GeoJSON, klart til [PV-kalkulatoren](/api/dokumentasjon/pv) (`resultat.pv_kalkulator.arrays_param`).

Dette er samme motor som [Solsjekk](/solsjekk) og «Avansert» i [PV-kalkulatoren](/sunpoint) bruker. Innsending krever et passord fra avtale (`passord` i kroppen) eller en partnerkode; [kontakt oss](/kontakt) for tilgang. Grense 1 per sekund og 20 per time per IP-adresse. Statuspolling er ikke begrenset.

## POST /api/roof/jobs

```bash
curl -X POST https://api.solkart.no/api/roof/jobs \
  -H "Content-Type: application/json" \
  -d '{"lat": 59.2185, "lon": 10.9298, "montering": "auto", "passord": "…"}'
```

Svar `202`: `{jobb_id, status: "queued", posisjon, foran, estimert_sekunder, ventende_i_koen}`. Poll `GET /api/roof/jobs/{jobb_id}` til `status` er `done` (typisk 15 til 60 s, med bildeanalyse inntil 90 s). Resultatet lever i 15 minutter. Se [asynkrone jobber](/api/dokumentasjon/jobber).

| Felt | Type | Standard | Beskrivelse |
|---|---|---|---|
| `lat`, `lon` | tall | påkrevd | Et punkt på bygget, 57 til 72 / 4 til 32 |
| `passord` | streng | | Fra avtale. Alternativt `partner` med partnerkode. |
| `montering` | `ost_vest` \| `sor` \| `auto` | `ost_vest` | Flate tak: øst/vest-stativ eller sørvendt. `auto` velger etter takform. Skråtak legges alltid i takets plan. |
| `retning` | `auto` \| `bygg` \| `himmel` | `auto` | Radretning: langs byggets akse eller etter himmelretning |
| `ai` | boolean | `true` | `false` hopper over bildeanalysen (raskere, ingen hindringer fra flyfoto) |
| `tegning` | boolean | `true` | Lag tegning (PNG) |
| `geojson` | boolean | `true` | Ta med moduler og soner som GeoJSON |
| `skraa_bare_sor` | boolean | `false` | På skråtak: bare flater mot sør (±90°) |
| `kvalitetssjekk` | boolean | `true` | Kryssjekk av takform og helning mellom høydemodell og flyfoto |
| `tving_ny` | boolean | `false` | Hopp over cache |
| `modul_wp` | 300 til 1000 | 650 | Moduleffekt, Wp |
| `modul_lengde_mm`, `modul_bredde_mm` | 1000 til 3000, 700 til 1500 | 2382, 1134 | Modulmål |
| `radavstand_sor_m` | 1,2 til 4 | | Radavstand for sørvendt stativ |
| `enhetsavstand_ost_vest_m` | 2,2 til 5 | | Enhetsavstand for øst/vest |
| `helning_grader` | 5 til 20 | | Stativhelning på flatt tak |
| `rad_retning_grader` | 0 til 179,99 | | Lås radretningen |
| `regler` | objekt | | Finjustering, se under |

### `regler`

| Felt | Område | Beskrivelse |
|---|---|---|
| `edge_setback_m` | 0 til 5 | Kantavstand flatt tak (1 m på alle kanter; NEK 400-7-712C krever 1 m fra én) |
| `pitched_edge_setback_m` | 0 til 5 | Skråtak: praktisk margin mot raft og gavl, målt på takflaten (0,3 m; ikke et NEK-krav) |
| `ridge_setback_m` | 0 til 5 | Skråtak: avstand fra møne/grat der flaten på andre siden også får moduler (0,6 m, NEK 400-7-712C) |
| `pitched_access_edge_m`, `pitched_access_edge` | 0 til 5, boolean | Skråtak: fri sone langs raften på én flate for brannvesenets tilkomst når alle takflatene brukes (1 m, NEK 400-7-712C); legges på flaten med minst sol |
| `lane_width_m`, `lane_interval_m` | 0 til 3, 10 til 200 | Gangbaner: bredde og avstand |
| `lanes_along_rows`, `lanes_across_rows` | boolean | Gangbaner langs og på tvers av radene |
| `shade_loss_max` | 0 til 1 | Maks akseptert skyggetap for en modulposisjon |
| `protrusion_min_m`, `protrusion_clearance_m` | 0,2 til 3, 0 til 3 | Minste hindring som tas hensyn til, og klaring rundt |
| `obstacle_north_factor`, `obstacle_ew_factor`, `obstacle_south_m` | 0 til 5 | Skyggesoner rundt hindringer (ganger høyden mot nord og øst/vest, fast mot sør) |
| `obstacle_clearance_m`, `obstacle_height_m` | per type | Klaring (0 til 5 m) og standardhøyde (0 til 10 m) per objekttype: `ventilasjon`, `kjoleaggregat`, `takluke`, `overlys`, `roykluke`, `pipe`, `heissjakt`, `takoppbygg`, `antenne`, `sluk`, `kile`, `brannvegg`, `solceller`, `terrasse`, `gront_tak`, `annet` |
| `min_run_modules` | 1 til 10 | Korteste sammenhengende rad |
| `common_row_direction`, `align_columns` | boolean | Felles radretning på alle flater; juster kolonner |
| `pitched_orientation` | `portrait` \| `landscape` \| `auto` | Moduler stående eller liggende på skråtak |
| `pitched_north_max_tilt_deg` | 0 til 90 | Maks helning der nordvendte skråtak fortsatt brukes |

### Svar når `status` er `done`

```json
{
  "jobb_id": "3f9a1c2b7d0e", "status": "done",
  "tegning_url": "/roof/jobs/3f9a1c2b7d0e/tegning.png",
  "resultat": {
    "punkt": { "lat": 59.2185, "lon": 10.9298, "x_utm33": 272163, "y_utm33": 6575571 },
    "bygning": { "kilde_omriss": "FKB", "areal_m2": 1840, "hoyde_m": 8.2, "takform": "flatt", "takform_profiler": "flatt",
                 "takform_korrigert": false, "helning_flyfoto_grader": null, "takmateriale": "papp", "eksisterende_solceller": false,
                 "hovedakse_grader": 35, "omriss": ["…"] },
    "resultat": { "moduler": 266, "kwp": 172.9, "modul": { "wp": 650, "lengde_mm": 2382, "bredde_mm": 1134 },
                  "montering": "ost_vest", "montering_tekst": "Øst/vest-stativ 10°",
                  "brutto_takareal_m2": 1840, "brukbart_areal_m2": 1210, "modulareal_m2": 743, "dekningsgrad_pst": 40.4,
                  "kwp_per_m2_tak": 0.094, "takflater": 1,
                  "pv_kalkulator": { "flater": ["…"], "arrays_param": "86.45:10:-55,86.45:10:125", "mounting": "free" } },
    "takflater": [ { "id": 1, "type": "flatt", "areal_m2": 1840, "moduler": 266, "kwp": 172.9, "retning_grader": 35 } ],
    "utelukkelser": [ { "type": "ventilasjon", "kilde": "SunPoint bildeanalyse", "areal_m2": 6.1 } ],
    "kvalitetssjekk": { "status": "ok", "merknader": [] },
    "grunnlag": { "hoydemodell": "DOM 1 m 2023", "ortofoto": "ortofoto 2024", "omriss": "FKB-Bygning", "ai": true, "advarsler": [], "tid_s": 14.8 },
    "moduler": { "type": "FeatureCollection", "features": ["…"] },
    "meta": { "generator": "solkart takanalyse", "versjon": 1 }
  }
}
```

| Felt | Beskrivelse |
|---|---|
| `resultat.resultat.moduler`, `kwp` | Antall moduler og installert effekt |
| `resultat.resultat.pv_kalkulator.arrays_param` | Klar til `arrays=` i [`/api/pv/calc`](/api/dokumentasjon/pv): `kwp:helning:asimut` per flate, asimut 0 = sør |
| `resultat.bygning.takform`, `takform_profiler`, `takform_korrigert` | Takform fra flyfoto, fra høydeprofiler, og om de ble avstemt |
| `resultat.takflater[]` | Flater med retning, helning, areal, moduler og kWp. `fallretning_grader` er fallet modulene fikk; `fallretning_hoydemodell_grader` det høydemodellen målte. `rad_justering` er `takflate` (rader langs raften slik høydemodellen ser den) eller `raft` (lagt langs takflatens egen kant fordi det ga et regelmessig nett; forklart i `rad_merknad`). `nett` teller rader og kolonner (`moduler_per_rad`, `moduler_per_kolonne`, `regelmessig`, `rektangularitet`, `hindringer`, `advarsel`). |
| `resultat.utelukkelser[]` | Hindringer og soner som ble holdt fri, med kilde. På skråtak: `kant_skraa` (praktisk margin), `mone` (NEK 0,6 m når begge sider brukes) og `tilkomst` (NEK 1 m fri raft når alle flatene brukes); alle målt på takflaten og regnet om til planet med cos(helning) |
| `resultat.kvalitetssjekk` | Kryssjekk mellom kildene og merknader du bør lese. `nett_advarsler` lister skråflater der modulnettet er uregelmessig uten hindringer (fallretning eller helning trolig feiltolket); `nettsjekk` er det bildeanalysen fikk å vurdere, og `flater_rettet` fallretning/helning den rettet med sikkerhet ≥ 0,7 før anlegget ble pakket på nytt. |
| `resultat.grunnlag.advarsler[]` | Manglende data, gammel høydemodell, usikker takform |
| `moduler`, `utelukkelser_geojson`, `frie_soner_geojson` | GeoJSON i WGS84 for kart |

`GET /api/roof/jobs/{id}/tegning.png` gir tegningen med flyfoto, moduler og soner (`image/png`, hodene `X-Moduler` og `X-Kwp`, `Cache-Control: private, max-age=900`).

## POST /api/roof/layout

Synkron variant med samme kropp og svar (`resultat` direkte, pluss `tegning.png_base64` når `tegning` er på), inntil 90 s. Gir `503 BACKEND_BUSY` når køen er i bruk, og `504 TIMEOUT` (`Analysen brukte for lang tid (over 90 s). …`, med `Retry-After`) hvis analysen ikke rekker fram; bruk jobbendepunktet for store bygg.

## Feil

| Status | `code` | Betyr |
|---|---|---|
| `400` | `INVALID_INPUT` | Feil i kroppen, med feltnavn i meldingen (`regler.edge_setback_m må ligge mellom 0 og 5.`) |
| `401` | `PASSWORD_REQUIRED` | `Automatisk prosjektering krever passord.` |
| `404` | `NOT_FOUND` | Ukjent eller utløpt jobb |
| `409` | `NOT_READY` | Tegning bedt om før jobben er ferdig |
| `410` | `EXPIRED` | Tegnegrunnlaget er borte; kjør på nytt |
| `422` | `NO_BUILDING` | `Fant ingen bygning ved punktet (FKB/OSM). Klikk på taket i kartet.` Flytt punktet inn på taket. Også når bygget er større enn 400 m i utstrekning. |
| `429` | `RATE_LIMITED` | Over 1/s eller 20/time |
| `503` | `BACKEND_BUSY` | Køen er full (20); `Retry-After` |
| `504` | `TIMEOUT` | Analysen tok for lang tid: over 90 s synkront, over 120 s i kø (da som `feil.status` i jobbstatus) |

## Grenser for metoden

Analysen er et estimat før befaring. Den ser ikke takets bæreevne, tekniske installasjoner under taktekkingen, brannkrav som ikke er synlige fra lufta, eller elektrisk kapasitet. Bruk `kvalitetssjekk` og `grunnlag.advarsler` aktivt, og la prosjekterende kontrollere før tilbud.
