Spring til indhold

Ortofoto — live

Luftfoto-API — ortofoto som web-mercator XYZ-tiles + Kort-visning

Luftfoto (ortofoto) fra SDFI, skåret i standard web-mercator XYZ-tiles (256×256 JPEG) du kan lægge direkte i Leaflet, MapLibre eller OpenLayers — og den samme kilde driver Kort · 2D · 3D-skifteren på ejendommens situationsplan. Det er live nu over Dataforsyningen — en keyless demo-tile kan du teste uden nøgle. Orienterings-backdrop, ikke målfast.

GET /v1/orto/tile/:z/:x/:y

Hvad Luftfoto-API’et giver dig

Web-mercator XYZ-tiles — drop-in i ethvert kort

Standard z/x/y-tilekoordinater (Google/OSM/Leaflet), 256×256 JPEG. Peg Leaflet, MapLibre eller OpenLayers på tile-URL’en, og luftfotoet ligger som baggrund — ingen WMS-jonglering.

EPSG:3857 — nul reprojektion i din klient

Vi henter fra SDFI’s ortofoto-WMS i web-mercator og skærer det i XYZ-tiles, så tilene lander præcis oven på dine matrikel- og GeoDanmark-lag uden et proj4-CRS i browseren.

Kort-visning indbygget på ejendomssiden

Samme tiles driver Kort · 2D · 3D-skifteren på ejendommens situationsplan: luftfoto med matrikel- og bygningsomrids ovenpå, ved siden af den flade 2D-tegning og den interaktive 3D-massing.

Ejendommen gennem tiden — og kun de år, der findes

Med ?aar=YYYY henter du en tidligere årgang. Danmark flyves i en regional rotation, så den nationale liste er ikke hvad der dækker et sted: /v1/orto/daekning?lon=&lat= svarer på, hvilke årgange der faktisk er fløjet hen over netop dét punkt — så en årstalsvælger ikke bliver til halve knapper, der viser et tomt billede.

?dpr=2 — skarpt på retina uden fire gange så mange kald

Samme tile-adresse, dobbelt opløsning: ?dpr=2 renderer 512×512 i stedet for 256×256 og dækker nøjagtig samme jord, så du kan blande de to i ét kort. Den anden måde at fordoble skarpheden på — ét zoomniveau ind — koster fire tiles pr. tile. Her koster den ét, og det er stadig ét afregnet kald.

Samme nøgle, cache og SLA — ingen egen SDFI-adgang

Genudstillet over den samme Dataforsyningen-token som DHM, med Grundfasts cache- og SLA-lag og aggressiv tile-caching, så et kortudsnit er billigt. Du behøver ikke selv en SDFI-konto.

Læg luftfotoet i dit kort

Endpointet er GET /v1/orto/tile/:z/:x/:y med en gf_live_-nøgle — samme auth og metering som de øvrige registre. Tile-koordinaterne er standard web-mercator XYZ; peg dit kort på URL-skabelonen /v1/orto/tile/{z}/{x}/{y}:

terminalbash
# Ét tile (z/x/y = web-mercator):
curl -H "Authorization: Bearer gf_live_…" \
  "https://api.grundfast.dk/v1/orto/tile/17/70111/41024" -o tile.jpg

Kort · 2D · 3D på ejendommen

De samme tiles driver Kort-visningen i situationsplanen på hver ejendomsside: et luftfoto som baggrund med det præcise matrikel- og GeoDanmark-omrids tegnet ovenpå — ved siden af den flade 2D-tegning og den interaktive 3D-massing, i én skifter. Prøv det på en rigtig ejendom og skift til Kort. Luftfotoet er vejledende (© SDFI) — brug 2D-tegningen fra det officielle matrikeldata til en ansøgning.

Status & datakontrakt

LiveLive over Dataforsyningens ortofoto — demo-tilen virker uden nøgle.

Svaret er en rå image/jpeg med Cache-Control: public, så tiles caches på edge og i browseren og kun kolde tiles rammer upstream. Et tile uden for Danmarks dækning kommer tilbage som et blankt billede (stadig 200); manglende token svarer 503, upstream-fejl 502.

# Live nu (Bearer gf_live_…) — web-mercator XYZ, 256×256 JPEG:
GET /v1/orto/tile/17/70111/41024200  Content-Type: image/jpeg   (et rigtigt luftfoto-tile)
       Cache-Control: public, max-age=(edge/browser-cachet)

# Uden for Danmarks dækning (fx over hav) → et blankt tile, stadig 200.

# Keyless demo-tile — samme XYZ-skema, ingen nøgle (til frontends):
GET /v1/demo/orto/tile/17/70111/41024200  image/jpeg   (rigtigt luftfoto i prod; offline-sample uden token)

# En tidligere årgang. Er året ikke fløjet hen over netop dét tile,
# får du 404 med en forklaring — ALDRIG dette års foto under et gammelt årstal:
GET /v1/orto/tile/17/70111/41024?aar=2015200  image/jpeg
GET /v1/orto/tile/17/70111/41024?aar=2019   (ikke fløjet her)404  { "error": "ortofoto 2019 does not cover this tile (…)" }

# Hvilke årgange dækker så DETTE punkt? Ét kald, uanset hvor mange år der prøves:
GET /v1/orto/daekning?lon=12.5723&lat=55.6817200  { punkt: {}, tile: { z: 15, x: 17528, y: 10255 },
         antal: 14, antal_daekkede: 14,
         aargange: [ { aar: 2025, oploesning_cm: 10, daekker: true },] }

# daekker: null = uafklaret (upstream svarede ikke), ALDRIG "ikke fløjet her".

# Hvilke årgange UDGIVER tjenesten overhovedet (national liste, ingen upstream-token nødvendig):
GET /v1/orto/aargange
→ 200  { aargange: [ { aar: 2025, layer: "geodanmark_2025_10cm",
                       oploesningCm: 10, candidates: [] },] }

# Samme tile i dobbelt opløsning til en retina-skærm — samme jord, 512×512, ét kald:
GET /v1/orto/tile/17/70111/41024?dpr=2200  image/jpeg   (dpr må være 1 eller 2; alt andet er 400)
GET/v1/orto/tile/:z/:x/:y
live

Keyed web-mercator XYZ-tile (256×256 JPEG) — til din egen produktion, målt pr. kald. Klar at kalde nu.

GET/v1/demo/orto/tile/:z/:x/:y
live

Keyless tile til frontends (samme XYZ-skema, IP-rate-limited) — driver bl.a. Kort-visningen. Virker uden nøgle.

GET/v1/orto/daekning?lon=&lat=
live

Hvilke årgange er FLØJET over netop dette punkt — grundlaget for en årstalsvælger. Ét afregnet kald uanset hvor mange år der prøves.

GET/v1/orto/aargange
live

Den nationale liste over udgivne årgange, læst af tjenestens egen GetCapabilities. Ikke en dækningsudtalelse — den fås ovenfor.

Kom i gang med luftfoto-tiles

Opret en gf_live_-nøgle i dashboardet og peg dit kort på /v1/orto/tile/{z}/{x}/{y}. Spørgsmål om lag (forår/sommer), dækning eller rate-grænser? Skriv til os.

Se også

Ofte stillede spørgsmål

Er ortofoto-tiles live nu?

Ja. GET /v1/orto/tile/:z/:x/:y er live — 256×256 web-mercator JPEG-tiles (XYZ), samme posture og nøgle som DHM. En keyless demo på /v1/demo/orto/tile/:z/:x/:y driver bl.a. Kort-visningen på ejendomssiden. Endpointet svarer kun 503, hvis en deployment ikke har Dataforsyningen-token konfigureret — det er ikke tilfældet i prod.

Hvad er forskellen på det keyede og det keyless (demo) endpoint?

GET /v1/orto/tile/:z/:x/:y kræver en gf_live_-nøgle og måles pr. kald som resten af API’et — til din egen produktion. GET /v1/demo/orto/tile/:z/:x/:y er keyless (IP-rate-limited), tænkt til et førstepartswebsite/en offentlig kortvisning — det er den, Grundfasts egen Kort-visning bruger. Begge leverer det samme rigtige luftfoto i prod.

Er luftfotoet målfast / kan det bruges som situationsplan?

Nej. Et luftfoto er en orienterings-backdrop — ikke målfast, og kommunen accepterer det ikke som situationsplan. Læg det præcise matrikel- + GeoDanmark-omrids ovenpå og markér det som vejledende. Til selve ansøgningen bruger du den 2D-situationsplan, der tegnes af det officielle matrikel- og bygningsdata.

Hvilket luftfoto er det, og hvordan placerer tilene sig?

Forårs-ortofotoet (orto_foraar, løvfrit — skarpere tag og fodaftryk) fra SDFI som standard, konfigurerbart. Tilene er standard web-mercator XYZ (z/x/y som Google/OSM/Leaflet) i 256×256 JPEG og EPSG:3857, så de lægger sig direkte oven på dine øvrige web-kort-lag uden reprojektion i klienten.

Kan jeg vise ejendommen gennem tiden — år for år?

Ja. ?aar=YYYY på tile-endpointet henter en tidligere årgang af den nationale serie (2012–2025 i dag; GET /v1/orto/aargange lister dem). Men den liste er NATIONAL og er ikke hvad der dækker et bestemt sted: Danmark flyves i en regional rotation, så målt live har Krystalgade i København alle fjorten årgange, Rynkeby på Fyn seks og Skagen tre. Derfor findes GET /v1/orto/daekning?lon=&lat=, som svarer på det lokale spørgsmål — den prøver ét tile pr. udgivet år og cacher svaret pr. z15-tile (~1,2 km, som en flyveblok er formet), og den måles som ÉT kald uanset hvor mange år den prøvede. Feltet daekker har tre tilstande: true og false er begge MÅLINGER, mens null betyder at opslaget ikke nåede at afgøre det. Vis aldrig null som "ikke fløjet her" — i en gennem-tiden-visning læses et manglende foto som en manglende bygning. Et år, der ikke dækker det tile, du beder om, svarer 404 med en forklaring frem for at falde tilbage på dette års foto under et gammelt årstal.

Hvad koster tiles, og hvordan holdes forbruget nede?

Det keyede tile-endpoint kører på den fælles selvbetjente prismodel (Free / Starter / Pro / Scale) og måles som ét kald pr. tile. Fordi tiles er statiske (ortofoto opdateres ~årligt) sætter vi public Cache-Control + et Redis-tile-cache-lag, så kun kolde tiles rammer upstream — et kortudsnit på et par tiles er billigt, og pan/zoom serveres fra edge/browser.

Kortet ser blødt ud på en retina-skærm — hvad gør jeg?

Sæt ?dpr=2 på tile-endpointet. Så renderes samme tile-adresse i 512×512 i stedet for 256×256. Det er ikke et zoomniveau: tilet dækker nøjagtig den samme jord, så du kan blande 256- og 512-tiles i det samme kort, og de lander samme sted. Grunden til at parameteren findes er regnestykket: den anden måde at fordoble den lineære skarphed på er at zoome ét niveau ind, og det er fire tiles pr. tile. ?dpr=2 er ét kald og én afregnet enhed — kun selve billedet er større. I Leaflet/MapLibre skal du samtidig sætte tileSize: 512 og zoomOffset: -1, ellers tegnes tilene i dobbelt størrelse. Kun 1 og 2 accepteres; alt andet er en 400, fordi hver størrelse er sin egen cache-nøgle og sit eget upstream-kald.

Kan jeg nå luftfoto-data fra SDK’et og fra en AI-agent?

Ja, for de to JSON-endpoints: gf.ortoAargange() giver den nationale liste over årgange, og gf.ortoDaekning(lon, lat) giver hvilke af dem der faktisk dækker punktet. Begge er også MCP-værktøjet orto_luftfoto_aargange, så en agent kan spørge "hvilke luftfoto-årgange findes der over den her ejendom" uden at kende REST-API’et. Selve tilene er JPEG og leveres derfor kun over HTTP — hverken SDK’et eller MCP flytter billeddata.

Er Grundfast officielt / tilknyttet SDFI?

Nej. Grundfast er et uafhængigt compatibility-lag — uofficielt, men det virker. Luftfotoet stammer fra SDFI / Dataforsyningen (CC BY 4.0); vi krediterer kilden (© SDFI, vejledende).

Luftfoto i hele landet

Ortofoto som tiles — og som Kort på ejendommen

SDFI’s ortofoto skåret i standard web-mercator XYZ-tiles til dit eget kort, og indbygget som Kort · 2D · 3D-situationsplan på hver ejendom. Orienterings-backdrop, ikke målfast — det præcise matrikel- og bygningsomrids ligger ovenpå.

Tegnet af vores egne data — grænser: DAGI · adresser: DAR · matrikler: Matriklen (åbne data).