Sol og horisont
Horisontprofil i 720 retninger for et punkt i Norge, i tre nivåer: terreng fra DTM10 (gratis, uten nøkkel), fra takhøyde med nærfelt fra DOM 1 m, og presis analyse med skyggetap, PDF og CSV. Eksport til PVsyst, PV*SOL, SAM, HelioScope og Meteonorm.
- GET /api/horizon/terrain
- POST /api/horizon/rooftop
- POST /api/horizon/precise
Tre nivåer
| Nivå | Endepunkt | Grunnlag | Bruk | Tilgang |
|---|---|---|---|---|
| 1 Terreng | GET /api/horizon/terrain |
Kartverket DTM10, forhåndsberegnet for hele landet | Fjell og åser; input til PVGIS-lignende beregninger | Åpent, ingen kvote |
| 2 Tak | POST /api/horizon/rooftop |
DOM 1 m (bygninger og trær) i nærfeltet, DTM10 utenfor | Horisont sett fra et tak, med nabobygg | Åpent i pilot, 5/s og 300/time per IP |
| 3 Presis | POST /api/horizon/precise |
Som nivå 2, pluss skyggetap for en panelflate, PDF og CSV | Dokumentasjon i prosjektering | Åpent i pilot, 1/s og 30/time per IP |
Alle svarer med 720 asimutpunkter (0 til 359,5° med 0,5° oppløsning, 0 = nord, med klokka) og horisonthøyde i grader over horisontalplanet.
GET /api/horizon/terrain
curl "https://api.solkart.no/api/horizon/terrain?lat=59.91&lon=10.75"
| Parameter | Standard | Beskrivelse |
|---|---|---|
lat, lon |
påkrevd | 57 til 72° N, 4 til 32° Ø |
format |
json |
json, binary, csv, pvsyst, pvsol, sam, helioscope, meteonorm, geojson |
Svar 200 (ekte svar, Oslo sentrum; forkortet):
{
"lat": 59.91, "lon": 10.75,
"tile_key": "599_107", "dtm_year": "2026",
"api_tier": "terrain", "version": "v3.1",
"n_azimuth": 720,
"azimuth_deg": [0, 0.5, 1, 1.5, "…"],
"elevation_deg": [1.99, 2.03, 1.97, 2.04, "…"],
"dtm_ground_z_m": null
}
format=binary gir 1440 byte: 720 verdier som little-endian float16, for innbygging i egne verktøy. Eksportformatene leveres som fil (Content-Disposition: inline; filename="tier1_horizon_<tile>_<lat>_<lon>.<ext>") i formatet verktøyet importerer direkte: PVsyst «Horizon file», PV*SOL, SAM «shading file», HelioScope, Meteonorm.
Hoder: Cache-Control: public, max-age=86400, X-Horizon-Tile-Key, X-DTM-Year, X-Api-Tier: terrain, X-Api-Version: v3.1.
Feil: 400 lat og lon må være tall (grader, WGS84). / (lat, lon) er utenfor Norge-bbox [57, 72] × [4, 32]. / format må være én av: …; 404 Ingen terrain-tile for <tile> … (punktet er innenfor boksen, men utenfor rutenettet, typisk hav).
POST /api/horizon/rooftop
Horisont fra et punkt over bakken, med bygninger og vegetasjon fra DOM 1 m i nærfeltet.
curl -X POST https://api.solkart.no/api/horizon/rooftop \
-H "Content-Type: application/json" \
-d '{"lat": 59.2185, "lon": 10.9298, "observer_height_m": 6.5}'
| Felt | Type | Standard | Beskrivelse |
|---|---|---|---|
lat, lon |
tall | påkrevd | 57 til 72 / 4 til 32 |
observer_height_m |
0 til 50 | 3,0 | Observatørens høyde over terrenget (DTM), typisk takhøyde pluss 1 m |
observer_z_masl |
−50 til 3000 | Absolutt høyde over havet; overstyrer observer_height_m |
|
include_tier1 |
boolean | true |
Fyll inn fjernhorisont fra nivå 1 utenfor DOM-dekningen |
?format= som nivå 1, unntatt binary.
Svar 200:
{
"azimuth_deg": ["…720"], "elevation_deg": ["…720"],
"tier1_used": true,
"near_horizon_only": ["…720 grader"],
"dtm_ground_z_m": 12.4,
"observer_height_above_dtm_m": 6.5,
"observer_z_masl": 18.9,
"dom_year": "2023", "dtm_year": "2026",
"api_tier": "rooftop", "version": "v3.1",
"compute_ms": 2140
}
near_horizon_only[i] er horisonthøyden i grader fra nærfeltet alene (DOM, uten fjernhorisont fra nivå 1), så du kan se hvor mye nabobygg og vegetasjon bidrar i hver retning. Hoder: X-Worker-Request-Id, X-API-Tier: rooftop, X-Quota-Remaining.
Feil (code): 400 INVALID_INPUT med presis melding (Felt 'lat' må være et tall., observer_height_m=<v> er utenfor [0, 50] m., format=binary er kun støttet på Tier 1 …); 405 METHOD_NOT_ALLOWED; 429 RATE_LIMITED med Retry-After; 502 BACKEND_ERROR; 504 BACKEND_TIMEOUT (10 s).
POST /api/horizon/precise
Synkron, 3 til 15 s. Gir i tillegg skyggetap for en panelflate og lenker til PDF og CSV som er gyldige en begrenset tid.
curl -X POST https://api.solkart.no/api/horizon/precise \
-H "Content-Type: application/json" \
-d '{"lat": 59.2185, "lon": 10.9298, "observer_height_m": 6.5, "panel_az_deg": 180, "panel_tilt_deg": 25}'
| Felt | Type | Standard | Beskrivelse |
|---|---|---|---|
lat, lon, observer_height_m, observer_z_masl |
som nivå 2 | ||
panel_az_deg |
0 til 360 | Panelets asimut, 0 = nord | |
panel_tilt_deg |
0 til 90 | Panelets helning | |
email |
streng | Mottaker av rapporten (valgfritt) |
Svar 200 (utdrag):
{
"job_id": "9c1e…",
"azimuth_deg": ["…720"], "elevation_deg": ["…720"], "n_azimuth": 720,
"dtm_ground_z_m": 12.4, "observer_height_above_dtm_m": 6.5, "observer_z_masl": 18.9,
"annual_yield_reduction_pct": 3.8,
"shaded_daylight_hours_pct": 9.1,
"annual_shade_hours": 412,
"near_field_objects": [ { "azimuth_deg": 214, "elevation_deg": 18.5, "distance_m": 14.2, "height_above_module_m": 4.1, "kind": "building", "shading_impact_score": 0.42 } ],
"pdf_url": "https://…", "csv_url": "https://…", "expires_at": "2026-09-16T18:40:00Z",
"is_stub": false,
"dom_year": "2023", "dtm_year": "2026", "api_tier": "precise", "version": "v3.1", "compute_ms": 8400
}
| Felt | Enhet | Beskrivelse |
|---|---|---|
annual_yield_reduction_pct |
% | Årlig produksjonstap fra horisontskygge for den oppgitte panelflaten |
shaded_daylight_hours_pct |
% | Andel av dagslystimene der sola står under horisonten |
annual_shade_hours |
timer/år | Timer med skygge |
near_field_objects[] |
Objekter i nærfeltet som gir skygge, med retning, avstand og påvirkning | |
pdf_url, csv_url, expires_at |
Signerte lenker som varer i 7 døgn; last ned før expires_at |
Ved andre formater enn JSON ligger X-Precise-Pdf-Url, X-Precise-Csv-Url og X-Precise-Job-Id i hodene. Feilene er som for nivå 2 (tidsavbrudd 60 s i stedet for 10 s), med i tillegg Felt 'email' ser ikke ut til å være en gyldig e-postadresse. og panel_tilt_deg=<v> er utenfor [0, 90]..
Bruk horisonten i egne beregninger
- PVGIS: PVGIS tar horisonten som en liste med høyder per asimut; bruk
elevation_degdirekte (PVGIS forventer 0 = nord, med klokka, som her), eventuelt tynnet til 48 punkter. - pvlib:
pvlib.shadingogirradiance.get_total_irradiancekan ta horisontprofilen; interpolerelevation_degpå solens asimut per time og sett direkte innstråling til 0 når solhøyden er under horisonten. - PV-kalkulatoren på solkart.no gjør dette allerede (
horizon=1er standard i/api/pv/calc).
Samme data i nettleseren, med solbane for valgfri dato: solkart.no/sol-og-horisont.