# Hent et overfladegrid

`GET /v1/dhm/overflade` · DHM

Det samme net som terrængriddet, men fra overflademodellen: toppen af tage, trækroner og naboens bygninger — til skyggekort og trækroner uden ét kald pr. punkt.

Overflademodellen (DSM) er det øverste, laseren ramte: tage, trækroner, master. Terrænmodellen under `/v1/dhm/terraen` er jorden, som om alt det var fjernet. Over åben mark er de to ens; under et træ eller en bygning er forskellen dens højde.

Endpointet er terrængriddet med den anden model og intet andet: samme `bbox` i EPSG:25832-meter, samme `trin`, samme grænser, samme pris og samme svarform. Rasteret hentes i modellens egen opløsning på 0,4 m, og en kote her er samme tal som `overflade_m` fra `/v1/dhm/kote` for samme koordinat.

Samme `bbox` og `trin` giver præcis de samme prøvepunkter i begge grid, så `overflade − terræn` indeks for indeks er højden over jorden — et træ, en bygning. Hvor en af dem er `null`, er forskellen det også.

`koter` er række for række: rækkerne går fra nord mod syd og kolonnerne fra vest mod øst. Indeks `r * kolonner + c` ligger i `[oprindelse[0] + c * celle_m, oprindelse[1] - r * celle_m]`. En celle uden data er `null`, aldrig 0.

**Godkendelse:** `Authorization: Bearer gf_live_…` (eller `gf_test_…`)

**Afregning:** Ét kald for hele griddet, uanset hvor mange koter det indeholder — som terrængriddet.

## Parametre

| Navn | Placering | Type | Påkrævet | Beskrivelse |
| --- | --- | --- | --- | --- |
| `bbox` | query | string | ja | `minx,miny,maxx,maxy` i EPSG:25832-meter. Højst 240 m på hver led og inden for Danmark. |
| `trin` | query | number | nej | Afstanden mellem prøverne i meter. Mindst 0,4 (modellens cellestørrelse), og stort nok til at holde griddet under 100.000 koter. |

## Eksempel

```bash
curl "https://api.grundfast.dk/v1/dhm/overflade?bbox=574700,6224250,574800,6224350&trin=50" \
  -H "Authorization: Bearer $GRUNDFAST_API_KEY"
```

## Svar (200)

```json
{
  "bbox": [
    574700,
    6224250,
    574800,
    6224350
  ],
  "epsg": 25832,
  "celle_m": 50,
  "kolonner": 3,
  "raekker": 3,
  "oprindelse": [
    574700,
    6224350
  ],
  "koter": [
    31.42,
    42.18,
    29.95,
    30.12,
    37.65,
    36.9,
    28.9,
    28.37,
    null
  ],
  "mangler": 1,
  "system": "DVR90",
  "system_epsg": 5799,
  "oploesning_m": 0.4,
  "metode": "naermeste_celle",
  "usikkerhed_m": 0.05,
  "meta": {
    "kilde": "Dataforsyningen DHM via Grundfast",
    "grundfast_version": "0.1.0"
  }
}
```

## Vigtige felter

| Felt | Type | Betydning |
| --- | --- | --- |
| `koter` | (number \| null)[] | `kolonner * raekker` overfladekoter i meter DVR90, række for række fra nord. `null` hvor modellen ingen data har. |
| `oprindelse` | [number, number] | EPSG:25832-koordinaten for prøve 0 — den nordvestligste, ikke et cellehjørne. |
| `kolonner / raekker` | integer | Griddets bredde og højde i antal prøver. |
| `celle_m` | number | Afstanden mellem nabo-prøver i meter — den `trin`, du bad om. |
| `mangler` | integer | Antal `null` i `koter`. `0` betyder, at griddet er komplet. |

## Fejl

| Status | Betydning |
| --- | --- |
| 400 | `bbox` er ikke fire tal, har min ≥ maks, ligger uden for Danmark i EPSG:25832 (typisk fordi den er sendt i WGS84-grader) eller er over 240 m på en led; eller `trin` er under 0,4 eller giver over 100.000 koter. Fejlen nævner grænsen. |
| 401 | Nøglen mangler eller er ugyldig. |
| 429 | Burst-grænsen eller månedskvoten er nået. Se `Retry-After`. |
| 502 | Højdemodellen kunne ikke nås. |
| 503 | DHM-kilden er ikke konfigureret i dette miljø. |

> Overflademodellen ændrer sig med det, der står på stedet: et træ, der er fældet, eller et hus, der er bygget siden flyvningen, er ikke med. `usikkerhed_m` er modellens landstal for faste flader — en trækrone er så usikker som sine blade.
