DHM koter har været tilgængelig via REST-API'en under services,- og certservices.datafordeler.dk. For at modernisere Datafordeleren og anvende standardiserede web-teknologier, erstattes REST-tjenesten med et eksisterende WMS-endepunktet under wms.datafordeler.dk. Dette er afspejlet i Datafordelerens dataoversigt.

Denne guide er for anvendere, som er:

  • Eksisterende brugere af den gamle REST-baserede DHM koter, der ønsker at migrere til den nye WMS-baserede løsning
  • Nye brugere, der vil i gang med at bruge DHM koter
  • It-arkitekter og udviklere, der skal integrere DHM koter i egne løsninger


Sideinformation



Begreber

I dette dokument bruges begreberne, som beskrevet nedenfor. Bemærk at begreberne også kan være yderligere forklaret i løbet af dokumentet med eksempler.

Begreb

Beskrivelse

Nuværende kotertjeneste

REST-API’en på certservices.datafordeler.dk, der tillader hentning af højdedata via punktkoordinater

Moderniseret kotertjeneste

WMS GetFeatureInfo-baseret tjeneste på wms.datafordeler.dk

Koter

Punkthøjdedata fra Danmarks Højdemodel (DHM), som repræsenterer terrænet eller bygninger

BBOX

Bounding Box – en rektangulær omkransning defineret af mindste og største koordinater

WMS

Web Map Service – standard web-tjeneste til visning og forespørgsler på geografiske data

GetFeatureInfo

WMS-forespørgsel der returnerer attributdata for en geografisk lokation

EPSG:4326

Geografisk koordinatsystem (længde/bredde)

EPSG:25832

UTM Zone 32N – plankoordinatsystem for Danmark






Afgrænsninger og forudsætninger

  • Den nye WMS-tjeneste accepterer kun ét punkt pr. kald. Hvis du tidligere har kaldt tjenesten med flere punkter i en enkelt forespørgsel, skal disse nu splittes op i separate WMS-kald.
  • Responsformatet er ændret fra JSON eller XML til text/plain.
  • Tjenesten er struktureret til at være en alternativ løsning til den nuværende DHM koter REST-tjeneste, men ikke en 1:1 erstatning.






DHM Koter nuværende og moderniserede udgave


DHM Koter udbyder punkthøjdedata fra Danmarks Højdemodel. Brugeren kan anmode om højdedata for geografiske koordinater, og tjenesten returnerer de tilsvarende højdeværdier.






Nuværende REST-baseret løsning


Den nuværende tjeneste på certservices.datafordeler.dk bruger REST-principper og tillader:

  • Punktforespørgsler via URL-parametre.
    • Den nuværende tjeneste omregner Punktkoordinater til BBOX internt, og returnerer data der svarer til BBOX kald.
  • Understøtter batch-forespørgsler med flere punkter i en enkelt kald.
  • JSON,- eller XML-responsformat.
  • Brugernavn/adgangskode eller certifikatautentifikation.




Moderniseret WMS-baseret løsning


Den nye tjeneste på wms.datafordeler.dk bruger WMS GetFeatureInfo-standarden og:

  • Kræver BBOX i stedet for punktkoordinater.
    • Tjenesten vil returnere data for midtpunktet for BBOX, ikke for hele BBOX og vil derfor returnere samme data som REST løsningen.
  • Håndterer én forespørgsel ad gangen.
  • Returnerer text/plain format.
  • API-key-, Shared Secret-, eller certifikatautentifikation.

Ved brug af den WMS-baserede løsning kræver tjenesten flere parametre end REST-tjenesten. Disse vil i eksemplerne i afsnit 6 være sat op til at give identiske resultater som REST-tjenesten.

Bemærk

De angivne parameterværdier er kalibreret til at returnere samme data som REST-løsningen. Hvis disse værdier ændres, kan tjenesten returnere data for andre geografiske områder, hvilket ikke nødvendigvis stemmer overens med REST-kotertjenesten. Vi anbefaler derfor at beholde disse standardværdier, medmindre du bevidst ønsker andre resultater.


Parameter

Bemærkning

i=175

Pixelkoordinat for horisontalt område

j=175

Pixelkoordinat for vertikalt område

WIDTH=351

Billedbredde i pixels

HEIGHT=351

Billedhøjde i pixels






Transitionsguide





Parametermapping


Gammel REST-parameter

Ny WMS-parameter

Bemærkning

elevationmodel=dtm

Layers=dhm_terraen

Typen af højdedata ligger nu i Layers-parameteren.

georef=EPSG:4326

CRS=EPSG:4326

Samme koordinatsystem, anderledes parameternavn.

geop=POINT(x y)

BBOX=minX,minY,maxX,maxY

Se afsnit 5.2 for beregning.

format=json

info_format=text/plain

WMS bruger text/plain for højdedata.

username/password eller certifikat

Apikey, OAuth Shared Secret eller Certifikat

Autentifikation er påkrævet.






Punkt til BBOX-konvertering


Den vigtigste ændring er, at WMS-tjenesten kræver en Bounding Box i stedet for et enkelt punkt. Du beregner BBOX ved at tilføje/fratrække en værdi fra dine punktkoordinater:




EPSG:4326 (Længde/bredde)


Brug offset på minimum ±0.005:

Hvis punkt er: 55.67, 11.67
Vil BBOX være: 55.665, 11.665, 55.675, 11.675


Formel:

BBOX = minX, minY, maxX, maxY
BBOX = (point_x - 0.005), (point_y - 0.005), (point_x + 0.005), (point_y + 0.005)


Pseudokode til omregning:

point = [x, y]
offset = 0.005
BBOX = (point.x - offset), (point.y - offset), (point.x + offset), (point.y + offset)



EPSG:25832 (UTM Zone 32N)


Brug offset på minimum ±1:

Hvis punkt er: 536116.33, 6169788.83
Vil BBOX være: 536115.33, 6169787.83, 536117.33, 6169789.83


Formel:

BBOX = minX, minY, maxX, maxY
BBOX = (point_x - 1), (point_y - 1), (point_x + 1), (point_y + 1)


Pseudokode til omregning:

point = [x, y]
offset = 1
BBOX = (point.x - offset), (point.y - offset), (point.x + offset), (point.y + offset)





Håndtering af multiple punkter

Nuværende løsning (REST):

geop=POINT(10.50 57.32)|POINT(10.51 57.33)|POINT(10.52 57.34)



Moderniseret løsning (WMS):

Du skal lave ét WMS-kald pr. punkt. Dette kan implementeres som en løkke i din kode:

List<Point> points = new List<Point>
{
    new Point(10.50, 57.32),
    new Point(10.51, 57.33),
    new Point(10.52, 57.34)
};

foreach (Point point in points)
{
    double smallValue = 0.005; // for EPSG:4326
    string bbox = $"{point.X - smallValue},{point.Y - smallValue}," +
                  $"{point.X + smallValue},{point.Y + smallValue}";
   
    // Kald WMS med denne BBOX
    CallWmsService(bbox);
}






Eksempler på transition






Eksempel 1: Enkelt punkt i EPSG:4326


Før (REST)

https://certservices.datafordeler.dk/DHMTerraen/DHMKoter/1.0.0/GEOREST/HentKoter        
		  ?elevationmodel=dtm
          &georef=EPSG:4326
          &geop=POINT(55.67 11.67)
          &format=json
          &username=BRUGERNAVN
          &password=ADGANGSKODE  




Efter (WMS)

https://wms.datafordeler.dk/DHMNedboer/dhm/1.0.0/WMS
          ?SERVICE=WMS
          &VERSION=1.3.0
          &REQUEST=GetFeatureInfo
          &BBOX=55.665,11.665,55.675,11.675
          &CRS=EPSG:4326
          &STYLES=
          &FORMAT=image/jpeg
          &Layers=dhm_terraen
          &query_layers=dhm_terraen
          &i=175
          &j=175
          &WIDTH=351
          &HEIGHT=351
          &info_format=text/plain
          &apikey=APIKEY







Eksempel 2: Enkelt punkt i EPSG:25832


Før (REST)

https://certservices.datafordeler.dk/DHMTerraen/DHMKoter/1.0.0/GEOREST/HentKoter        
		  ?elevationmodel=dtm
          &georef=EPSG:25832
          &geop=POINT(536116.33 6169788.83)
          &format=json
          &username=BRUGERNAVN
          &password=ADGANGSKODE 




Efter (WMS)

https://wms.datafordeler.dk/DHMNedboer/dhm/1.0.0/WMS
          ?SERVICE=WMS
          &VERSION=1.3.0
          &REQUEST=GetFeatureInfo
          &BBOX=536115.33,6169787.83,536117.33,6169789.83
          &CRS=EPSG:25832
          &STYLES=
          &FORMAT=image/jpeg
          &Layers=dhm_terraen
          &query_layers=dhm_terraen
          &i=175
          &j=175
          &WIDTH=351
          &HEIGHT=351
          &info_format=text/plain
          &apikey=APIKEY







Eksempel 3: Multiple punkter (tidligere batch-forespørgsel)

Før (REST)

https://certservices.datafordeler.dk/DHMTerraen/DHMKoter/1.0.0/GEOREST/HentKoter	
	?elevationmodel=dtm
	&georef=EPSG:4326
	&geop=POINT(10.503724366666667 57.32618695666667)|POINT(10.503724366666667 57.32685362333333)|POINT(10.504391033333334 57.32618695666667)
 	&username=BRUGERNAVN
	&password=ADGANGSKODE




Efter (WMS – separate kald)

Kald 1:

https://wms.datafordeler.dk/DHMNedboer/dhm/1.0.0/WMS
          ?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo
          &BBOX=57.321186956666667,10.498724366666667,57.331186956666667,10.508724366666667
          &CRS=EPSG:4326
          &STYLES=&FORMAT=image/jpeg&Layers=dhm_terraen&query_layers=dhm_terraen
          &i=175&j=175&WIDTH=351&HEIGHT=351
          &info_format=text/plain&apikey=APIKEY


Kald 2:

https://wms.datafordeler.dk/DHMNedboer/dhm/1.0.0/WMS
          ?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo
          &BBOX=57.321853623333333,10.498724366666667,57.331853623333333,10.508724366666667
          &CRS=EPSG:4326
          &STYLES=&FORMAT=image/jpeg&Layers=dhm_terraen&query_layers=dhm_terraen
          &i=175&j=175&WIDTH=351&HEIGHT=351
          &info_format=text/plain&apikey=APIKEY


Kald 3:

https://wms.datafordeler.dk/DHMNedboer/dhm/1.0.0/WMS
          ?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo
          &BBOX=57.321186956666667,10.499391033333334,57.331186956666667,10.509391033333334
          &CRS=EPSG:4326
          &STYLES=&FORMAT=image/jpeg&Layers=dhm_terraen&query_layers=dhm_terraen
          &i=175&j=175&WIDTH=351&HEIGHT=351
          &info_format=text/plain&apikey=APIKEY