Skovbyggelinje-API — § 17 på et koordinat
Ligger punktet inden for en registreret skovbyggelinje — 300 meter fra skov efter naturbeskyttelseslovens § 17 — eller er linjen ophævet netop dér? Laget rummer begge dele, og svaret skiller dem ad, så en ophævet linje aldrig læses som et byggeforbud og et byggeforbud aldrig forsvinder i en ophævelse. Svaret er linjen og dens attributter — aldrig en dom over et projekt.
GET /v1/natur/skovbyggelinjeHvad skovbyggelinje-API’et giver dig
300 m-linjen ved et koordinat
Send lon/lat i WGS84 og få, om punktet ligger inden for en registreret skovbyggelinje efter naturbeskyttelseslovens § 17. Vi reprojicerer selv til EPSG:25832 og slår op i kommunernes polygonlag — ingen WFS og intet projektionslag i din kode.
Gældende og ophævede linjer skilt ad
Laget rummer BÅDE de linjer der gælder og de 1.872 der er ophævet — i to forskellige kolonner, som er uenige på 1.532 af 11.293 polygoner. Svaret skiller dem: polygon er linjen der gælder, ophaevede er dem der er ophævet, hver med sin egen status.
Ophævelsen med årsag og afgørelse
Er linjen ophævet, får du hvorfor — statslig afgørelse eller bymæssig bebyggelse før 1968 — og hvor kommunen har publiceret afgørelsen, når den bærer et link. Plus areal, kommune og hvornår versionen trådte i kraft.
Et nej kan aldrig komme af en fejl
Et svar med skovbyggelinje: false er det, nogen bruger til at konkludere, at de ikke skal søge dispensation. Derfor må det kun komme af et opslag der lykkedes: nedetid, tomt lag eller et afkortet svar giver 502 — aldrig 200 med et falsk nej.
Slå et koordinat op
Endpointet er GET /v1/natur/skovbyggelinje?lon=&lat= med en gf_live_-nøgle — samme auth og metering som de øvrige registre. Har du kun en adresse, slår du den op i DAR først og sender adgangspunktets koordinat herind:
curl -H "Authorization: Bearer gf_live_…" \ "https://api.grundfast.dk/v1/natur/skovbyggelinje?lon=8.5286062&lat=55.8988908"
To kolonner, to spørgsmål — og de er uenige
Det er den ene ting, der er værd at vide om dette lag. Skovs_kode beskriver byggelinjen selv (Gældende eller Ophævet), mens Statuskode beskriver registreringen (Vedtaget, Aflyst, Ukendt, Forslag, Kladde). De to er uenige på 1.532 af 11.293 polygoner, der står som “Gældende / Vedtaget” om en linje, der er ophævet — registreringen er i kraft, og det, den registrerer, er netop ophævelsen.
Læser man kun status — den kolonne øjet lander på, og den kolonne søsterlaget for områdeklassificering faktisk afgøres på — melder man byggeforbud på 13,6 % af laget, hvor der ikke er noget. To polygoner går den modsatte vej, så ingen af kolonnerne er en genvej. Vi spørger begge og holder dem adskilt i svaret: polygon er linjen der gælder, ophaevede er dem der er ophævet. Dækker begge dele punktet, vinder forbuddet, og konflikt: true siger det højt.
Registreringen har også en tredje tilstand, som hverken er et ja eller et nej: 326 polygoner står som “Ukendt”, og 12 er kun forslag eller kladder. De tæller med — § 17 trækker linjen, kommunen kortlægger den bare, så en uafklaret kortlægning er ikke et uafklaret forbud — men svaret lader dig ikke tro, at det er fast: usikker: true betyder, at ingen vedtaget registrering står bag netop dette ja, og at det er værd at få bekræftet hos kommunen. Findes der en vedtaget registrering blandt polygonerne, er det den, der rapporteres i polygon.
Status & datakontrakt
# Live nu — Register #11 (Bearer gf_live_…): GET /v1/natur/skovbyggelinje?lon=8.5286062&lat=55.8988908 → 200 { punkt: { lon: 8.5286062, lat: 55.8988908 }, epsg25832: [470523.61, 6194926.91], skovbyggelinje: true, # ≥1 GÆLDENDE linje dækker punktet ophaevet: true, # …og ≥1 OPHÆVET linje gør det også polygon: { byggelinje: { kode: 1, navn: "Gældende" }, status: { kode: 3, navn: "Gældende / Vedtaget" }, i_kraft: true, ophaevelse: null, oprindelse: { kode: 1, navn: "Ortofoto" }, areal_m2: 387810.99, kommune: { navn: "Ringkøbing-Skjern kommune", cvr_kode: 29189609 } }, ophaevede: [ …3 polygoner, hver med byggelinje.kode 2 "Ophævet" ], forslag: false, usikker: false, antal_polygoner: 4, konflikt: true, # forbuddet vinder — de ophævede følger med som belæg kilde: { lag: "dai:skovbyggelinjer", opdateret: "2023-02-08T14:46:03.481Z" } } # Ophævet linje, med kommunens egen afgørelse (Silkeborg): GET /v1/natur/skovbyggelinje?lon=9.8143799&lat=56.1750771 → 200 { skovbyggelinje: false, ophaevet: true, polygon: null, ophaevede: [ { byggelinje: { kode: 2, navn: "Ophævet" }, status: { kode: 3, navn: "Gældende / Vedtaget" }, ophaevelse: { kode: 2, navn: "Statslig afgørelse" }, dokument_url: "http://webkort.silkeborg.dk/…" } ], … } # Linjen står, men registreringen er kun "Ukendt" (326 polygoner i laget): GET /v1/natur/skovbyggelinje?lon=8.9625781&lat=56.1306342 → 200 { skovbyggelinje: true, # linjen gælder — § 17 trækker den, ikke registreringen usikker: true, # …men ingen VEDTAGET registrering står bag dette ja polygon: { byggelinje: { kode: 1, navn: "Gældende" }, status: { kode: 0, navn: "Ukendt" }, … } } # Ingen linje registreret ved punktet — et MÅLT nej: → 200 { skovbyggelinje: false, ophaevet: false, polygon: null, ophaevede: [], antal_polygoner: 0, … } # Laget kan ikke nås, er tomt, eller svarede afkortet uden en gældende linje: → 502 { error: "upstream skovbyggelinje (DAI WFS) error" } # ALDRIG 200 med skovbyggelinje: false. # Demo-datakontrakten virker uden nøgle: GET /v1/demo/natur
/v1/natur/skovbyggelinje?lon=&lat=Skovbyggelinje (§ 17) ved et WGS84-koordinat, med gældende og ophævede linjer skilt ad. Kræver gf_-nøgle; DAWA-stilen x/y/srid virker også.
/v1/demo/naturDatakontrakten uden nøgle — et rigtigt opslag fanget fra laget (et punkt dækket af både en gældende og tre ophævede linjer).
Hvad registret ikke er
Skovbyggelinjen er én af naturbeskyttelseslovens bygge- og beskyttelseslinjer. Dette register svarer på den — ikke på sø- og å-, kirke-, fortids- eller klitfredningslinjen, og ikke på § 3-beskyttet natur, fredninger eller lokalplaner. Og det er ikke en dom over dit projekt: § 17 stk. 2 undtager en række konkrete projekter — bl.a. småbygninger på højst 50 m² i byzone (nr. 7) og ombygning uden udvidet boligareal (nr. 8) — og efter stk. 3 gælder forbuddet kun mellem bygningen og skoven, hvor der allerede ligger væsentlig lovlig bebyggelse tættere på skoven. Derfor bærer svaret ingen kraever_dispensation og intet andet felt, der kan læses som et ja/nej om et projekt. Det fortæller dig, at der er en linje, og hvor sagen hører hjemme.
Kom i gang med skovbyggelinjer
Opret en gratis nøgle i dashboardet og send dit første koordinat — eller kald /v1/demo/natur med det samme og se datakontrakten uden nøgle.
Se også
Ofte stillede spørgsmål
Er skovbyggelinje-API’et live nu?
Ja. GET /v1/natur/skovbyggelinje?lon=&lat= er live som Register #11 over Danmarks Miljøportals DAI-lag dai:skovbyggelinjer. Kilden kræver ingen konto eller nøgle hos Miljøportalen, så registret har i praksis ingen "ukonfigureret" tilstand — du skal kun bruge din egen gf_-nøgle. Datakontrakten kan testes uden nøgle på /v1/demo/natur.
Hvad er en skovbyggelinje?
Naturbeskyttelseslovens § 17 stk. 1 forbyder som udgangspunkt at placere bebyggelse, campingvogne og lignende inden for 300 meter fra en skov. Linjen gælder om alle offentlige skove og om private skove på mindst 20 hektar sammenhængende areal — også i byzone. Den følger af loven selv: kommunerne kortlægger den i Danmarks Arealinformation, og de kan reducere eller ophæve den ved afgørelse. Registret er altså et kort over reglen, ikke reglen — og reglen har sine egne undtagelser i § 17 stk. 2 og stk. 3.
Hvorfor rummer laget både gældende og ophævede linjer?
Fordi en ophævelse er noget kommunen registrerer, ikke noget den sletter. Laget har to kolonner: Skovs_kode beskriver byggelinjen selv (1 = Gældende på 9.421 polygoner, 2 = Ophævet på 1.872), mens Statuskode beskriver selve registreringen (3 = "Gældende / Vedtaget", 4 = Aflyst, 0 = Ukendt, 2 = Forslag, 1 = Kladde). De to er uenige på 1.532 af 11.293 polygoner, som står som "Gældende / Vedtaget" om en linje der er ophævet — registreringen er i kraft og fortæller, at linjen blev ophævet. Læser man kun status, melder man byggeforbud på 13,6 % af laget, hvor der ikke er noget. Vores svar skiller de to ad: polygon er linjen der gælder, ophaevede er dem der er ophævet.
Kan skovbyggelinje: false komme af en upstream-fejl?
Nej. Et false er det svar, nogen bruger til at konkludere, at de ikke skal søge dispensation, så det må kun komme af et opslag der faktisk lykkedes. Nedetid, en fejlkode, et svar der ikke er JSON, et lag der er tømt — alle giver 502. Det gælder også et afkortet svar: dækker der flere polygoner punktet, end vi hentede, og er ingen af de hentede i kraft, ville et nej hvile på polygoner vi aldrig har set, og så svarer vi 502 i stedet.
Hvad betyder ophaevet, konflikt, forslag og usikker i svaret?
ophaevet siger, at mindst én polygon ved punktet registrerer en ophævet linje — det er et selvstændigt spørgsmål fra skovbyggelinje, og et punkt kan ligge i begge dele. Sker det, gælder linjen stadig, og konflikt: true markerer uenigheden, mens de ophævede polygoner følger med som belæg. forslag: true betyder, at en registrering ved punktet kun er et forslag eller en kladde; til forskel fra en forslags-polygon i områdeklassificeringen tæller den stadig med, fordi § 17 trækker linjen — kommunen kortlægger den bare — så et udkast til en kortlægning er ikke et udkast til et forbud. usikker: true er det bredere flag: ingen af de gældende polygoner ved punktet har en VEDTAGET registrering — de er "Ukendt" (326 polygoner i laget), forslag eller kladde — så linjen rapporteres, men det ja er værd at få bekræftet hos kommunen. Er blot én af dem vedtaget, er usikker false, og den vedtagne polygon er den, der rapporteres.
Hvad gør jeg, hvis punktet ligger inden for linjen?
Først og fremmest: linjen er ikke i sig selv en dom over dit projekt. § 17 stk. 2 undtager en række helt konkrete projekter — blandt dem nr. 7 (garager, carporte, udhuse, drivhuse og lignende på højst 50 m² i byzone, opført i tilknytning til et eksisterende beboelseshus og uden at der skabes en ny bolig) og nr. 8 (ombygning af et beboelseshus i byzone eller sommerhusområde, når boligarealet ikke udvides). Og efter stk. 3 gælder forbuddet kun mellem bygningen og skoven på strækninger, hvor der allerede ligger væsentlig lovlig bebyggelse tættere på skoven end 300 m. Falder projektet uden for undtagelserne, er det kommunen, der kan dispensere efter § 65. Svaret peger på kommunen bag polygonen, og bærer polygonen et dokumentlink — det gør 209 af de 11.293, næsten alle Silkeborgs — får du kommunens egen afgørelse med.
Hvorfor svarer API’et ikke bare, om jeg må bygge?
Fordi det ikke kan afgøres fra et koordinat. Om § 17 rent faktisk stopper et projekt afhænger af projekttypen, kvadratmeterne, om boligarealet vokser, og hvad der allerede ligger mellem grunden og skoven — fakta, som kun den, der kalder, sidder med. Derfor bærer svaret ingen kraever_dispensation, intet forbudt og intet andet felt, der kan læses som et ja/nej om et projekt: det rapporterer linjen og dens attributter, og undtagelserne i § 17 stk. 2 og stk. 3 lægger du selv oveni. Et felt, der lød som en dom, ville blive læst som en dom.
Hvilke koordinater skal jeg sende, og hvad koster et opslag?
Send lon/lat i WGS84 (lon ~7–16, lat ~54–58); DAWA-stilen x/y med srid=4326 eller 25832 virker også. Mangler en parameter, eller ligger punktet uden for Danmark, svarer endpointet 400. Opslaget kører på den fælles selvbetjente prismodel (Free / Starter / Pro / Scale) med samme nøgle og metering som BBR, Matriklen og DAR — ingen tillæg pr. register.
Er Grundfast officielt / tilknyttet myndighederne?
Nej. Grundfast er et uafhængigt compatibility-lag. Skovbyggelinjerne vedligeholdes af kommunerne i Danmarks Miljøportals DAI (Danmarks Arealinformation); vi krediterer kilden og udstiller den i en ryddet, versioneret form med cache og SLA oven på. Svaret er vejledende — kommunen og Miljøstyrelsen afgør den konkrete sag.
11.293 polygoner — og svaret på, hvilke af dem der stadig gælder
Kommunernes skovbyggelinjer fra Danmarks Arealinformation, slået op på et WGS84-koordinat. Gældende og ophævede linjer holdes adskilt, ophævelsen kommer med sin årsag og kommunens afgørelse, og et nej kommer aldrig af en upstream-fejl.