De entitetsbasserede WFS-tjenester kan til anvendes på to forskellige måder: Gennem separate REST-kald og gennem GIS-klienter, som QGIS, ArcGIS og MapInfo. Anvendelsesmønsteret for brug de entitetsbaserede WFS-tjenester forløber i begge tilfælde således:

  1. GetCapabilities: Hent oplysninger om de tilgængelige lag for det pågældende register
  2. DescribeFeatureType: Hent metadataskema for det pågældende lag
  3. GetFeature: Hent data for det pågældende lag

Selvom det er nøjagtigt samme data der returneres i begge tilfælde, er arbejdsgangen ved brug af separate REST-kald og GIS-klienter lidt forskellig.


Sideinformation



Separate REST-kald

Hvis man vil tilgå de entitetsbaserede WFS-tjenester gennem almindelige REST-kald, skal man først kalde den pågældende WFS-tjeneste med GetCapabilities-metoden:


Metode: GetCapabilities

URL

https://wfs.datafordeler.dk/<register>/<register>_WFS/<version>/WFS?service=WFS&version=2.0.0&request=GetCapabilities&apikey={YOUR_API_KEY}

HTTP-metode

GET

Returværdier

  • Returnerer HTTP 200 – OK, ved succes.
  • Returnerer HTTP 400 – Bad Request, ved angivelse af forkerte parametre.
  • Returnerer HTTP 404 – Not Found, hvis den angivne ressource ikke kan findes.
  • Returnerer HTTP 500 – Internal Server Error, hvis der er sket en ukendt fejl

Adgang

IT-system med API-nøgle, OAuth Shared Secret eller OAuth Certifikat.




GetCapabilities kan kaldes med følgende parametre:


Parameter

Type

Beskrivelse

Obligatorisk

register

String

Angiver hvilket register der skal hentes oplysninger for. 

Se Tabel 2 for en oversigt over registre der udstilles via WFS.

Ja

service-version

String

Angiver hvilken serviceversion af tjenesten der kaldes

Ja

service

String

Angiver hvilken service man forsøger at kalde. Kaldes kun værdien ”WFS”.

Ja

OGC-version

String

Angiver hvilken OGC WFS-version der anvendes. Kan kaldes kun med værdien "2.0.0"

Ja




Denne tjeneste returnerer altid en xml-fil ved HTTP 200 – OK. Filen indeholder metadata om WFS-tjenesten, der beskriver hvilke lag der findes for det pågældende register.

Et eksempel på et kald til tjenesten ved brug af API-nøgle:

https://wfs.datafordeler.dk/BBR/BBR_WFS/1.0.0&WFS?service=WFS&version=2.0.0&request=GetCapabilities&apiKey= {YOUR_API_KEY} 

Svaret returnerer en længere XML-fil, som blandt andet indeholder elementet FeatureTypeList:


<FeatureTypeList>
    <FeatureType xmlns:bbr_v001="http://datafordeler.dk/schemas/bbr/v001/gml3">
        <Name>bbr_v001:tekniskanlaeg_current</Name>
        <Title>tekniskanlaeg_current</Title>
        <Abstract>bbr_tekniskanlaeg_v001_current</Abstract>
        <DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
        <ows:WGS84BoundingBox>
            <ows:LowerCorner>-60.0 54.5</ows:LowerCorner>
            <ows:UpperCorner>15.2 84.0</ows:UpperCorner>
        </ows:WGS84BoundingBox>
    </FeatureType>
    <FeatureType xmlns:bbr_v001="http://datafordeler.dk/schemas/bbr/v001/gml3">
        <Name>bbr_v001:tekniskanlaeg_hist</Name>
        <Title>tekniskanlaeg_hist</Title>
        <Abstract>bbr_tekniskanlaeg_v001_hist</Abstract>
        <DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
        <ows:WGS84BoundingBox>
            <ows:LowerCorner>-60.0 54.5</ows:LowerCorner>
            <ows:UpperCorner>15.2 84.0</ows:UpperCorner>
        </ows:WGS84BoundingBox>
    </FeatureType>
</FeatureTypeList>





Fra denne liste fremgår det at der for BBR udstilles to lag:

  • tekniskanlaeg_current
  • tekniskanlaeg_hist

Ønsker man at hente data for et af disse lag kan man således bruge DescribeFeatureType-metoden til først at hente information om det specifikke lag:


Metode: DescribeFeatureType

URL

https://wfs.datafordeler.dk//_WFS//WFS?service=&version=<OGC-version>&request=DescribeFeatureType&typeName=<typeName>

HTTP-metode

GET

Returværdier

  • Returnerer HTTP 200 – OK, ved succes.
  • Returnerer HTTP 400 – Bad Request, ved angivelse af forkerte parametre.
  • Returnerer HTTP 404 – Not Found, hvis den angivne ressource ikke kan findes.
  • Returnerer HTTP 500 – Internal Server Error, hvis der er sket en ukendt fejl

Adgang

IT-system med API-nøgle, OAuth Shared Secret eller OAuth Certifikat.



DescribeFeatureType kan kaldes med følgende parametre:


Parameter

Type

Beskrivelse

Obligatorisk

register

String

Angiver hvilket register der skal hentes oplysninger for. 

Se Tabel 2 for en oversigt over registre der udstilles via WFS.

Ja

service-version

String

Angiver hvilken serviceversion af tjenesten der kaldes

Ja

service

String

Angiver hvilken service man forsøger at kalde. Kaldes kun med værdien ”WFS”.

Ja

Metode

String

DescribeFeatureType + TypeName


OGC-version

String

Angiver hvilken OGC WFS-version der anvendes. Kaldes kun med værdien "2.0.0"

Ja

typeName

String

Angiver hvilket lag der skal hentes metadata for. Hvis denne ikke angives, hentes metadata for alle tilgængelige lag.

Nej




Denne tjeneste returnerer altid en xml-fil ved HTTP 200 – OK. Filen indeholder et metadataskema om WFS-tjenesten, der beskriver hvilke data der findes for det pågældende lag.

Et eksempel på et kald til tjenesten ved brug af API-nøgle:

https://wfs.datafordeler.dk/BBR/BBR_WFS/1.0.0&WFS?service=WFS&version=2.0.0&request=DescribeFeatureType&typeName=tekniskanlaeg_current&apiKey=placeholderNoegle

Svaret returnerer en længere XML-fil, som blandt andet indeholder elementet complexType:


<xsd:complexType name="tekniskanlaeg_currentType">
  <xsd:complexContent>
    <xsd:extension base="gml:AbstractFeatureType">
      <xsd:sequence>
        <xsd:element maxOccurs="1" minOccurs="0" name="forretningshændelse" nillable="true" type="xsd:string"/>
        <xsd:element maxOccurs="1" minOccurs="0" name="forretningsområde" nillable="true" type="xsd:string"/>
        <xsd:element maxOccurs="1" minOccurs="0" name="forretningsproces" nillable="true" type="xsd:string"/>
        <xsd:element maxOccurs="1" minOccurs="0" name="id_namespace" nillable="true" type="xsd:string"/>
        <xsd:element maxOccurs="1" minOccurs="0" name="id_lokalId" nillable="true" type="xsd:string"/>
        <xsd:element maxOccurs="1" minOccurs="0" name="kommunekode" nillable="true" type="xsd:string"/>
        ... # Flere properties
        <xsd:element maxOccurs="1" minOccurs="0" name="tek109Koordinat" nillable="true" type="gml:PointPropertyType"/>
        ... # Flere properties
      </xsd:sequence>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>





Herfra kan man læse hvilke attributter der eksisterer på et givent lag og hvilken type den pågældende attribut er. Man kan bruge oplysningerne fra dette kald til at sortere eller filtrere data når man efterfølgende kalder WFS-tjenesterne med GetFeature-metoden. Bemærk at tek109Koordinat er af typen ”gml:PointPropertyType”, hvilket er en geometri. Man kan derfor i GetFeature-metoden lave geografisk filtrering af data på baggrund af denne attribut ved hjælp af bbox- eller cql_filter-parameteren.

For at hente data for det pågældende lag, skal man bruge GetFeature-metoden:


Metode: GetFeature

URL

https://wfs.datafordeler.dk/<register>/<register>_WFS/<service-version>/WFS?service=<service>&
version=<OGC-version>&request=GetFeature&typeName=<typeName>&count=<count>&
startIndex=<startIndex>&outputFormat=<outputFormat>&bbox=<bbox>&cql_filter=<cql_filter>&
sortBy=<sortBy>

HTTP-metode

GET

Returværdier

·        Returnerer HTTP 200 – OK, ved succes.

·        Returnerer HTTP 400 – Bad Request, ved angivelse af forkerte parametre.

·        Returnerer HTTP 404 – Not Found, hvis den angivne ressource ikke kan findes.

·        Returnerer HTTP 500 – Internal Server Error, hvis der er sket en ukendt fejl

Adgang

IT-system med API-nøgle, OAuth Shared Secret eller OAuth Certifikat.



GetFeature kan kaldes med følgende parametre:


Parameter

Type

Beskrivelse

Obligatorisk

register

String

Angiver hvilket register der skal hentes oplysninger for. 

Se Tabel 2 for en oversigt over registre der udstilles via WFS.

Ja

service-version

String

Angiver hvilken version af servicen registeret kan kalde.

Ja

service

String

Angiver hvilken service man forsøger at kalde. aldes kun med værdien ”WFS”.

Ja

OGC-version

String

Angiver hvilken OGC WFS-version der anvendes. Kaldes kun med værdien "2.0.0"

Ja

typeName

String

Angiver hvilket lag der skal hentes metadata for. Hvis denne ikke angives, hentes metadata for alle tilgængelige lag.

Nej

count

String

Angiver det maksimal antal features der returneres. Mulige værdier mellem 1 og 10.000.

Nej

startindex

String

Startposition for paging

Nej

outputFormat

String

Outputformatet på data (GML eller GeoJSON). Se afsnit 2.5.

Nej

bbox

String

Bounding box for geometrisk filtrering (kan ikke kombineres med cql_filter). Se afsnit 2.7.1.

Nej

cql_filter

String

CQL (Common Query Language) expression for attribut-/geometrisk filtrering (kan ikke kombineres med bbox). Se afsnit 2.7.2.

Nej

sortBy

String

Navnet på feltet der ønskes sorteret på. Tilføj +D  (descending) for omvendt sortering.

Nej




Denne tjeneste returnerer enten en xml- eller en json-fil ved HTTP 200 – OK. Filen indeholder data fra WFS-tjenesten for det pågældende lag.

Et eksempel på et kald til tjenesten ved brug af API-nøgle:

https://wfs.datafordeler.dk/BBR/BBR_WFS/1.0.0&WFS?service=WFS&version=2.0.0&request=GetFeature&typeName=tekniskanlaeg_current&outputFormat=json&apiKey=placeholderNoegle

Svaret returnerer en længere json-fil med følgende data:


{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "id": "tekniskanlaeg_current.fid--7d828cb6_198a8bc895e_-72d8",
            "geometry": {
                "type": "Point",
                "coordinates": [
                    563733.21,
                    6242798.55,
                    0
                ]
            },
            "geometry_name": "tek109Koordinat",
            "properties": {
                "forretningshændelse": "TekniskAnlæg",
                "forretningsområde": "54.15.05.05",
                "forretningsproces": "4",
                "id_namespace": "http://data.gov.dk/bbr/tekniskanlæg",
                "id_lokalId": "407bdc4d-dd2b-4c69-ab2f-c382d9a6e8a2",
                "kommunekode": "0710",
                ... # Flere properties
            }
        },
        ... # Flere features
    ]
}





Herfra kan lave gentagne kald med forskellige filtrerings- eller pagingsparametre for at hente alt det ønskede data.






GIS-klienter: QGIS

I stedet for at tilgå de entitetsbaserede WFS-tjenester gennem almindelige REST-kald, kan man vælge at gøre det gennem en GIS-klient. GIS-klienter er software der blandt andet er specialudviklet til behandling af geodata der udstilles gennem WFS-tjenester. I dette eksempel bruges GIS-klienten QGIS.

Når programmet åbnes, ser brugerfladen ud som vist i Figur 18.





Hvis man dobbeltklikker ”OpenStreetMap” til venstre i ”Browser”-menuen, vil et verdenskort blive tilføjet til brugerfladen og laget ”OpenStreetMap” vil fremgå af ”Layers”-fanen. Zoomer man ind på Danmark ser klienten ud som vist i Figur 19 .





For at oprette forbindelse til en WFS-tjeneste, højreklikker man ”WFS / OGC API – Features” i ”Browser”-menuen og klikker ”New Connection…” som vist i Figur 20 .





Klikker man ”New Connection…” kan man nu konfigurere en ny WFS-forbindelse. Her sættes URL’en, autentifikation og WFS-versionsnummer. Man kan også sætte andre parametre såsom ”Max. number of features”, hvilket svarer til count-parameteren i GetFeature-metoden. For at lave et kald til WFS-tjenesten for BBR indsættes værdierne som vist i Figur 21. Bemærk at ”Max. number of features” er sat til 100.





Klikker man ”OK”, vil ”Datafordeler BBR” fremgå som et punkt under ”WFS / OGC API – Features” i ”Browser”-menuen. Dobbeltklikker man derefter ”Datafordeler BBR” laver QGIS et GetCapabilities-kald til Datafordeleren, som derefter vil vise alle tilgængelige lag for BBR, som vist i Figur 22.





QGIS kalder herefter automatisk DescribeFeatureType og bruger resultatet til at konfigurere attributtabeller korrekt, så man ikke selv behøver at tage stilling til hvordan data er struktureret. Man kan derfor blot dobbeltklikke et af lagene, for eksempel tekniskanlaeg_current, hvorefter klienten laver et GetFeature-kald til Datafordeleren, tilføjer det pågældende lag i ”Layers”-fanen og viser det resulterende data på kortet, som vist i Figur 23.





Herfra kan blot navigere kortet og klikke på datapunkterne for at finde det ønskede data.