Tag og solceller pr. BFE
Hver tagflade målt i højdemodellen, med skygge måned for måned, paneler der kan ligge der, produktion og tre anlæg med økonomi.
https://api.grundfast.dk/v1/dhm/tag/{bfe}/solBygger på samme tagfit som /v1/dhm/bygninger: RANSAC-planer i overflademodellen (0,4 m) inden for GeoDanmark-omridset. Hver celle gives til den flade, der forklarer den, så hver flade får sit sande areal (planareal ÷ cos hældning), sin retning, tagfod, top og spær. Celler, ingen flade forklarer — skorsten, kviste, træ over taget — står i uden_flade_m2 og får ingen paneler.
Skyggen er målt, ikke antaget: fra op til fem punkter på fladen marcheres der stråler gennem overflademodellen ud til 100 m i 72 retninger, og horisonten blokerer den direkte sol time for time i et typisk år fra PVGIS. Ydelsen pr. kWp kommer fra PVGIS (EU JRC) for fladens hældning og retning og ganges med månedens skyggefaktor.
Panelerne pakkes i fladens eget plan med fast panel (1,762 × 1,134 m, 440 Wp) og 0,30 m fri kant. Tre anlæg: maks (alle paneler på flader over 650 kWh/kWp), foreslaaet (bedste flade først, til produktionen dækker forbruget) og lille (halvdelen). Økonomien bruger Energinets day-ahead-priser for prisområdet, vægtet med hvornår solen skinner på adressen.
En tagform, højdemodellen ikke kan navngive, får beregnet: false og en aarsag — vi gætter aldrig et tag ud fra årstal eller materiale. Alle antagelser står i forudsaetninger, og de økonomiske kan overskrives på forespørgslen.
/v1/plan/ejendom/:bfe/citater.Godkendelse · API-nøgle
Send din nøgle som Authorization: Bearer gf_live_… — eller gf_test_… for gratis sandbox-kald. Se Godkendelse og nøgler.
Afregning
Ét kald — også selvom svaret samler DHM, GeoDanmark, BBR, PVGIS og Energi Data Service.
Eksempel
curl "https://api.grundfast.dk/v1/dhm/tag/5651067/sol?forbrug_kwh=5500" \
-H "Authorization: Bearer $GRUNDFAST_API_KEY"{
"bfe_nummer": 4045894,
"prisomraade": "DK1",
"antal": 1,
"bygninger": [
{
"bbr_uuid": "0a3f5097-5b4e-42b8-9e44-0003ba298018",
"bbr": {
"anvendelse": "Fritliggende enfamiliehus",
"opfoerelsesaar": 1974,
"tagdaekning": "Tegl",
"bebygget_areal_m2": 140
},
"tagform": "saddeltag",
"konfidens": 0.78,
"haeldning_grader": 37.5,
"terraen_m": 40,
"beregnet": true,
"aarsag": null,
"tag_aarsag": null,
"fodaftryk_m2": 140,
"uden_flade_m2": 0,
"tagmaal": {
"tagfod_m": 28.8,
"rygning_m": 14.4,
"spaer_m": 6.6,
"tagflade_m2": 185,
"tagflade_inkl_udhaeng_m2": 201.9
},
"flader": [
{
"nr": 1,
"haeldning_grader": 37.1,
"aspekt_grader": 180,
"retning": "S",
"areal_m2": 93.8,
"areal_vandret_m2": 74.9,
"tagfod_m": 14.4,
"top_m": 14.4,
"spaer_m": 6.6,
"skygge": {
"aar_pct": 4.4,
"maaned_pct": [
22,
17.6,
2.2,
1.3,
1.4,
1.4,
1.6,
1.5,
1.7,
12.4,
28.1,
19.2
],
"horisont_grader": [
37.4,
37.4,
37.4,
29.5,
29.5,
26.1,
24.2,
18.6,
11.6,
4.1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
19.1,
25.5,
24.1,
21.8,
19.1,
0,
0,
0,
0,
7.4,
13.9,
20.5,
26.1,
29.5,
29.5,
36.9,
37.4
]
},
"kwh_pr_kwp": 902,
"kwh_pr_kwp_uden_skygge": 943,
"maaned_kwh_pr_kwp": [
17.2,
31.4,
82.7,
117.2,
129.6,
129.1,
122.1,
107.7,
84.8,
48.5,
19.1,
12.6
],
"paneler": {
"antal": 35,
"retning": "liggende",
"kwp": 15.4,
"kwh_aar": 13894,
"placering": [
[
[
9.1733889,
56.4111018,
2.92
],
[
9.1733604,
56.4111018,
2.92
],
[
9.1733604,
56.4111099,
3.6
],
[
9.173389,
56.4111099,
3.6
]
]
]
}
},
{
"nr": 2,
"haeldning_grader": 38,
"aspekt_grader": 0,
"retning": "N",
"areal_m2": 91.2,
"areal_vandret_m2": 71.8,
"tagfod_m": 14.4,
"top_m": 14.4,
"spaer_m": 6.6,
"skygge": {
"aar_pct": 0,
"maaned_pct": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"horisont_grader": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
7.1,
13.7,
20.2,
25.6,
29.2,
29.2,
36.3,
37,
37,
37,
37,
29.2,
29.2,
25.6,
24,
17.9,
11.3,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
},
"kwh_pr_kwp": 443,
"kwh_pr_kwp_uden_skygge": 443,
"maaned_kwh_pr_kwp": [
4.9,
10.8,
24.1,
42.3,
77,
90.9,
83.4,
55.6,
29.4,
15.6,
6,
3.1
],
"paneler": {
"antal": 31,
"retning": "liggende",
"kwp": 13.6,
"kwh_aar": 6043,
"placering": [
[
[
9.1731687,
56.4111898,
2.89
],
[
9.1731973,
56.4111897,
2.89
],
[
9.1731972,
56.4111817,
3.59
],
[
9.1731687,
56.4111818,
3.59
]
]
]
}
}
],
"anlaeg": {
"lille": {
"paneler": 6,
"kwp": 2.6,
"kwh_aar": 2382,
"maaned_kwh": [
46,
83,
218,
309,
342,
341,
322,
284,
224,
128,
50,
33
],
"fordeling": [
{
"flade": 1,
"paneler": 6
}
],
"oekonomi": {
"pris_kr": 34400,
"egetforbrug_andel": 0.48,
"egetforbrug_kwh": 1146,
"salg_kwh": 1236,
"vaerdi_aar1_kr": 2249,
"tilbagebetaling_aar": 15.9
}
},
"foreslaaet": {
"paneler": 12,
"kwp": 5.3,
"kwh_aar": 4764,
"maaned_kwh": [
91,
166,
437,
619,
685,
682,
645,
569,
448,
256,
101,
67
],
"fordeling": [
{
"flade": 1,
"paneler": 12
}
],
"oekonomi": {
"pris_kr": 56900,
"egetforbrug_andel": 0.34,
"egetforbrug_kwh": 1620,
"salg_kwh": 3143,
"vaerdi_aar1_kr": 3892,
"tilbagebetaling_aar": 15.1
}
},
"maks": {
"paneler": 35,
"kwp": 15.4,
"kwh_aar": 13894,
"maaned_kwh": [
266,
484,
1274,
1805,
1997,
1988,
1880,
1658,
1306,
748,
294,
194
],
"fordeling": [
{
"flade": 1,
"paneler": 35
}
],
"oekonomi": {
"pris_kr": 142900,
"egetforbrug_andel": 0.2,
"egetforbrug_kwh": 2767,
"salg_kwh": 11126,
"vaerdi_aar1_kr": 9583,
"tilbagebetaling_aar": 15.5
}
}
},
"anlaeg_aarsag": null
}
],
"elpris": {
"prisomraade": "DK1",
"fra": "2025-10-05",
"til": "2026-10-05",
"gennemsnit_kr_kwh": 0.77,
"solvaegtet_kr_kwh": 0.53,
"kilde": "Energi Data Service (Energinet), DayAheadPrices — CC BY 4.0"
},
"forudsaetninger": {
"panel": {
"laengde_m": 1.762,
"bredde_m": 1.134,
"effekt_wp": 440,
"kantafstand_m": 0.3,
"mellemrum_m": 0.02
},
"forbrug_kwh": 4500,
"egetforbrug_andel": 0.35,
"egetforbrug_regel": "andel = egetforbrug_andel × kvadratroden af (forbrug_kwh / produktion), højst 0,8",
"pris_fast_kr": 12000,
"pris_kr_pr_kwp": 8500,
"tillaeg_kr_kwh": 0.6,
"moms_andel": 0.25,
"salgsgebyr_kr_kwh": 0.02,
"degradering_pr_aar": 0.005,
"horisont_aar": 30,
"min_kwh_pr_kwp": 650,
"systemtab_pct": 14,
"udhaeng_m": 0.3,
"horisont_afstand_m": 100,
"observator_over_flade_m": 0.3,
"albedo": 0.2,
"noter": [
"Panel: 1,76 × 1,13 m, 440 Wp, 0,3 m fri kant til tagets kanter, skorstene og kviste.",
"Hældning, retning og flader er målt i Danmarks Højdemodel (0,4 m celler) inden for GeoDanmarks omrids — ikke på taget. En flade, højdemodellen ikke kan navngive, får ingen tal.",
"Skygge fra bygninger, træer og terræn op til 100 m væk er målt i overflademodellen, som er fløjet én gang; løvfald om vinteren er ikke med, så vinterskyggen fra løvtræer er sat for højt."
]
},
"metode": {
"tagflader": "RANSAC-planer fra /v1/dhm/bygninger; hver 0,4 m-celle i omridset tildeles den definerende flade, der forklarer den inden for 0,35 m",
"skygge": "Horisont målt ved ray-marching i overflademodellen (0,8 m) ud til 100 m fra op til fem punkter på fladen; direkte stråling blokeres time for time i et typisk år, diffus reduceres med den skjulte del af himlen foran fladen",
"instraaling": "PVGIS PVcalc (månedligt gennemsnit, 1 kWp, uden PVGIS-horisont) ganget med månedens skyggefaktor fra PVGIS TMY",
"paneler": "Fladens målte celler i fladens eget plan, formindsket med kantafstanden; rækker fra tagfoden og op, stående og liggende afprøvet",
"elpris": "Day-ahead-priser for prisområdet over de seneste 365 dage, vægtet time for time med adressens typiske solindstråling"
},
"ufuldstaendig": false,
"kilder": [
{
"navn": "Danmarks Højdemodel (Klimadatastyrelsen) via Dataforsyningen",
"brug": "Tagflader, hældning, retning og horisont",
"vilkaar": "Frie data"
},
{
"navn": "GeoDanmark",
"brug": "Bygningernes omrids",
"vilkaar": "CC BY 4.0 — @geodanmark"
},
{
"navn": "PVGIS (EU Joint Research Centre)",
"brug": "Indstråling og ydelse pr. kWp",
"vilkaar": "PVGIS © European Union, 2001-2026 (EU Joint Research Centre) — genbrug tilladt med kildeangivelse"
},
{
"navn": "Energi Data Service (Energinet)",
"brug": "Day-ahead-elpriser",
"vilkaar": "CC BY 4.0"
},
{
"navn": "BBR",
"brug": "Anvendelse, opførelsesår og tagdækning",
"vilkaar": "Frie data"
}
],
"attribution": "@geodanmark",
"meta": {
"kilde": "Dataforsyningen DHM + GeoDanmark + PVGIS + Energi Data Service via Grundfast",
"grundfast_version": "0.1.0"
}
}Forkortet: lange lister og geometrier er skåret ned — de viste værdier er uændrede.
Parametre
bfeintegerstipåkrævet- BFE-nummeret på ejendommen.Eksempel:
5651067 bygningstringqueryvalgfri- Kun denne bygning (BBR-UUID). Uden: alle bygninger, de fire største tage beregnet.
forbrug_kwhintegerqueryvalgfri- Husstandens årsforbrug, som det foreslåede anlæg dimensioneres efter. Standard 4500.Eksempel:
5500 egetforbrug_andelnumberqueryvalgfri- Andel af produktionen, der bruges i huset, når anlægget producerer præcis forbruget. Standard 0,35.
pris_kr_pr_kwpintegerqueryvalgfri- Installeret pris pr. kWp inkl. moms. Standard 8.500 kr.
pris_fast_krintegerqueryvalgfri- Fast del af prisen (inverter, stillads, tilslutning) inkl. moms. Standard 12.000 kr.
tillaeg_kr_kwhnumberqueryvalgfri- Hvad en købt kWh koster oven i spotprisen, ekskl. moms (nettarif, afgifter, handelstillæg). Standard 0,60 kr.
Felter i svaret
bygninger[].flader[]object[]- Én pr. målt tagflade:
haeldning_grader,aspekt_grader/retning,areal_m2(sandt) ogareal_vandret_m2,tagfod_m,top_m,spaer_m,skygge,kwh_pr_kwp(med skygge) ogkwh_pr_kwp_uden_skygge(PVGIS’ eget tal),maaned_kwh_pr_kwpogpaneler. bygninger[].flader[].skyggeobjectaar_pctogmaaned_pct: andel af indstrålingen, den målte horisont tager.horisont_grader: 36 vinkler (10° ad gangen fra nord med uret) til den højeste forhindring set fra fladens midte.bygninger[].flader[].paneler.placeringnumber[][][]- Hvert panels fire hjørner som
[lon, lat, h];her meter over bygningensterraen_m— klar til at tegne i et kort eller en 3D-model. bygninger[].tagmaalobject | null- Til tækkemanden:
tagfod_m(samlet),rygning_m(nullpå fladt og ensidigt tag),spaer_m,tagflade_m2ogtagflade_inkl_udhaeng_m2med det antagne udhæng ved tagfod og gavle. bygninger[].anlaegobject | nulllille,foreslaaetogmaks:paneler,kwp,kwh_aar,maaned_kwh,fordelingpr. flade ogoekonomi(pris, egetforbrug, værdi år 1,tilbagebetaling_aar).nullmedanlaeg_aarsag, når ingen flade egner sig.bygninger[].aarsagstring | null- Hvorfor en bygning ikke er beregnet:
tag_ikke_maalt(setag_aarsag),for_lille,uden_for_budget(spørg medbygning=),horisont_utilgaengeligellerinstraaling_utilgaengelig. elprisobject | null- Prisområde, periode, gennemsnitlig og solvægtet day-ahead-pris i kr./kWh.
null, når priserne ikke kunne hentes — så eroekonomiogsånull, mens produktionen står. forudsaetningerobject- Hver antagelse tallene hviler på — panel, kantafstand, forbrug, priser, egetforbrugsreglen, degradering, udhæng, horisontafstand — og
noteri klar tekst til at vise ved siden af tallene. kilderobject[]- Kilderne med vilkår. PVGIS må genbruges med kildeangivelse; GeoDanmark kræver
@geodanmark, hvor omridsene vises.
Statuskoder
| Status | Betydning |
|---|---|
| 200 | Svaret er leveret. |
| 400 | BFE-nummeret er ikke et positivt heltal, eller en antagelse ligger uden for sit interval. |
| 401 | Nøglen mangler eller er ugyldig. |
| 404 | BFE-nummeret findes ikke, eller bygning er ikke en bygning på ejendommen. |
| 429 | Burst-grænsen eller månedskvoten er nået. Se Retry-After. |
| 502 | Højdemodellen kunne ikke nås for nogen af bygningerne. En delvis fejl er en 200 med beregnet: false og en aarsag på de berørte bygninger. |
| 503 | DHM-, GeoDanmark- eller PVGIS-kilden er ikke konfigureret i dette miljø. |
Fejl har altid formen { "error": "…" }. Se Fejl og statuskoder for, hvad der kan prøves igen.
Prøv det
Live-kald fra siden
Bruges ofte sammen med
- GETTag og sol som PDF
/v1/dhm /tag /:bfe /sol /rapport.pdf - GETHent bygningshøjder
/v1/dhm /bygninger /:bfe - GETLokalplanens ord med sidetal
/v1/plan /ejendom /:bfe /citater
Læs mere om DHM, og hvad data kan bruges til, på produktsiden.