Denne side er en guide til hvordan du som anvender kan bruge Datafordelerens entitetsbaserede WFS-tjenester.
Sideinformation
Datafordeleren tilbyder Web Feature Service (WFS)-tjenester til distribution af geografiske vektordata fra danske registre. WFS er en international OGC-standard, der muliggør struktureret udveksling af geodata mellem systemer og GIS-applikationer.
Datafordeleren udstiller entitetsbaserede WFS-tjenester, som er automatisk genererede baseret direkte på registrenes datamodeller. Tjenesterne følger OGC WFS 2.0.0 standarden. Denne guide fokuserer på hvordan disse tjenester anvendes i praksis.
Yderligere information om WFS og GeoServer kan findes på:
På denne side bruges begreberne nedenfor. Bemærk at begreberne også er yderligere forklaret i løbet af dokumentet med eksempler.
Begreb | Beskrivelse |
WFS | Web Feature Service – OGC-standard protokol for udveksling af geografiske vektordata |
OGC | Open Geospatial Consortium - international standardiseringsorganisation for geografiske data |
Feature | En geografisk enhed med geometri og attributter (f.eks. en bygning eller et vejstykke) |
Lag | Et lag i WFS der repræsenterer en samling features af samme type. Kaldes også "Layer" i engelsksprogede GIS-programmer |
FeatureType | Definition af strukturen for en type features (attributnavne, datatyper mv.) |
GML | Geography Markup Language - XML-baseret format til geografiske data |
GeoJSON | JSON-baseret format til geografiske data, populært i webapplikationer |
CQL | Common Query Language - tekstbaseret forespørgselssprog til filtrering (GeoServer-specifik udvidelse) |
Entitetsbaserede WFS-tjenester repræsenterer en automatiseret tilgang til at eksponere geodata, hvor hver tabel i et registers datamodel bliver direkte tilgængelig som et WFS-lag gennem en standardiseret proces. Dette koncept bygger på OGCs WFS 2.0.0 standard, men implementerer en én-til-én mapping mellem databasetabeller og WFS FeatureTypes.
Grundprincippet er at data eksponeres præcis som det ligger i registrenes databaser - uden forudgående filtrering, aggregering eller transformation. Hver entitet i datamodellen bliver automatisk et tilgængeligt lag i WFS-tjenesten. Dette betyder at hvis et register har en tabel kaldet "bygning", vil denne automatisk blive eksponeret som et lag kaldet "bygning_current" for aktuelle data og "bygning_hist" for historiske data.
Tilgangen inkluderer både entiteter med og uden geospatiale data. Dette betyder at selv administrative tabeller som Matriklens Jordstykke-entitet, der ikke indeholder geospatiale data, bliver tilgængelige gennem den samme standardiserede WFS-grænseflade med geometry-feltet sat til null.
Datafordeleren tilbyder to forskellige tilgange til WFS-tjenester:
Begge typer kører på GeoServer og følger OGC WFS 2.0.0 standarden. Denne guide fokuserer på entitetsbaserede WFS-tjenester.
WFS-tjenesterne udstilles gennem URL'er, der følger formen:
![]()
<register> er forkortelsen for det register anvenderen forsøger at hente data fra, <register>_WFS er servicenavnet der følger et fast mønster, <version> er versionen af tjenesten for det pågældende register (aktuelt 1.0.0 for alle initiale services) og <query-parametre> er de forskellige parametre hver tjeneste kan tage. Parametrene er yderligere beskrevet i afsnit 2.3, 2.4, 2.5 og 2.6 og versionering beskrives i afsnit 2.7.2.2.
De registre, der udstiller én eller flere entiteter gennem de entitetsbaserede WFS-tjenester, er vist i Tabel 3 nedenfor. Bemærk at et register kan vælge, hvilke entiteter de ønsker udstillet gennem tjenesterne, og at det derfor ikke nødvendigvis er alle entiteter i et register der kan tilgås gennem disse tjenester.
Register | Forkortelse | Service Version | Eksempel URL |
Bygnings- og Boligregistret | BBR | 1.0.0 | |
Danmarks Administrative Geografiske Inddeling | DAGI | 1.0.0 | |
Danmarks Adresseregister | DAR | 1.0.0 | |
DHM Højdekurver | DHMHoejdekurver | 1.0.0 | https://wfs.datafordeler.dk/DHMHoejdekurver/DHMHoejdekurver_WFS/1.0.0/WFS |
DHM | DHMOprindelse | 1.0.0 | https://wfs.datafordeler.dk/DHMOprindelse/DHMOprindelse_WFS/1.0.0/WFS |
Danmarks Fikspunktsregister | FIKSPUNKT | 1.0.0 | https://wfs.datafordeler.dk/FIKSPUNKT/FIKSPUNKT_WFS/1.0.0/WFS |
GeoDanmark Vektor | GEODKV | 1.0.0 | |
Matriklen | MAT | 1.0.0 |
Nogle registre har data opdelt i flere logiske enheder kaldet replikeringskanaler. For eksempel har DHM separate kanaler for Højdekurver og Oprindelse. Disse eksponeres som separate WFS-services med hver deres URL som vist i tabellen ovenfor.
Alle WFS-forespørgsler består af en base-URL og påkrævede query-parametre. Base-URL'en følger strukturen:
https://wfs.datafordeler.dk/<register>/<register>_WFS/<serviceVersion>/WFS |
Query-parametrene inkluderer tre standard OGC-parametre (service-type, protokolversion og ønsket funktion) samt autentifikation. Disse parametre skal altid inkluderes som query-parametre for at få et gyldigt svar fra tjenesten.
Følgende query-parametre skal altid angives ved WFS forespørgsler:
Parameter | Obligatorisk | Mulige inputparametre | Beskrivelse |
service | Ja | WFS | Servicetype |
OGC-version | Ja | 2.0.0 | Versionen af WFS-protokollen |
request | Ja | GetCapabilities/ DescribeFeatureType/ | Navnet på WFS-metode |
apikey/Oauth token | Ja | Din api-nøgle/token | Autentifikation. Se afsnit 3. |
Det er vigtigt at skelne mellem to forskellige versionsnumre i WFS-forespørgsler. Service-versionen i URL'en (f.eks. /1.0.0/) angiver version af servicen, mens WFS-protokol-versionen i parametrene (version=2.0.0) angiver versionen af WFS-standarden. WFS-protokol-versionen skal altid være 2.0.0, uanset hvilken serviceversion der tilgås.
I eksemplet nedenfor bruges:

Som vist i eksemplet ovenfor, indeholder URL'en både service-versionen (1.0.0) og WFS-protokol-versionen (2.0.0) på forskellige steder.
WFS-tjenesterne understøtter standard OGC-metoder der giver mulighed for at opdage tilgængelige data, forstå datastrukturen og hente de faktiske geografiske features. Hver metode har et specifikt formål i arbejdet med geografiske data.
Metode | Formål | Typisk anvendelse | Returnerer |
GetCapabilities | Henter tilgængelige lag og service metadata | Første kald til en WFS-service | XML metadata |
DescribeFeatureType | Henter datastrukturen for specifikke lag | Kaldes før opbygning af queries | XSD-skema |
GetFeature | Henter faktiske geografiske data | Dataudtræk og analyse | GML/GeoJSON |
For yderligere information om WFS-metoder, GeoServer WFS Reference: GeoServer's officielle dokumentation.
GetCapabilities-metoder bruges til at hente oplysning om de tilgængelige lag der er i en WFS-tjeneste samt hvilke metoder og formater der understøttes for disse lag. Dette er typisk det første kald man laver til en ny WFS-tjeneste for at forstå hvad der er tilgængeligt. GetCapabilities kan kaldes med ingen yderligere parametre end de standardparametre beskrevet i Tabel 4.
Eksempel:
https://wfs.datafordeler.dk/BBR/BBR_WFS/1.0.0/WFS?service=WFS&version=2.0.0&request=GetCapabilities&apikey={YOUR_API_KEY} |
Kald til GetCapabilities returnerer et længere XML-dokument der beskriver de pågældende tjenester. Kaldet returner blandt andet metadata om:
Læs mere om GeoServer GetCapabilities i GeoServer dokumentationen.
DescribeFeatureType-metode returnerer den detaljerede struktur i form af et skema for et lag. Dette bruges til at forstå, hvilke attributter der er tilgængelige, deres datatyper og eventuelle begrænsninger. GIS-software bruger ofte denne metode automatisk for at konfigurere attributtabeller korrekt. DescribeFeatureType bruger de samme standardparametre som beskrevet i Tabel 4 (service, version, request, apikey) plus følgende yderligere parameter beskrevet i Tabel 6 for at specificere hvilken entitet du vil se strukturen for.
Parameter | Standardværdi | Beskrivelse |
typeName | Alle lag | Den featureType der ønskes beskrevet |
For entitetsbaserede tjenester følger lagnavnene mønsteret {entitet}_{bitemporalitet} hvor entitet er bygning, tekniskanlaeg, adresse osv., og bitemporalitet er enten current (aktuelle data) eller hist (historiske data). Eksempler: bygning_current, tekniskanlaeg_hist, adresse_current.
Brug af typeName-parameteren:
1. Kald GetCapabilities for at se alle tilgængelige lag, for eksempel:
| https://wfs.datafordeler.dk/BBR/BBR_WFS/1.0.0/WFS?service=WFS&version=2.0.0&request=GetCapabilities&apikey={YOUR_API_KEY} |
2. Find lagnavne i FeatureTypeList i GetCapabilities-responset:

3. Brug lagnavnet direkte som vist i FeatureTypeList <Title>, eks. bygning_current eller bygning_hist og du vil modtage den detaljerede struktur, du anmodede om
DescribeFeatureType eksempel med bygning_current:
| https://wfs.datafordeler.dk/BBR/BBR_WFS/1.0.0/WFS?service=WFS&version=2.0.0&request=DescribeFeatureType&typeName=bygning_current&apikey={YOUR_API_KEY} |

Læs mere om DescribeFeatureType i GeoServer dokumentationen.
GetFeature-metode bruges til at hente de faktiske geografiske data. Dette er den primære metode når man skal arbejde med data i GIS-software eller lave analyser. GetFeature understøtter forskellige filtrerings- og udvælgelsesmuligheder gennem query-parametre. Alle inputparametre for GetFeature findes i følgende tabel:
Parameter | Obligatorisk | Standardværdi | Beskrivelse |
typeName | Ja | - | Den featureType der ønskes beskrevet |
count | Nej | 10000 | Maksimalt antal features der ønskes returneret (1-10000) |
startindex | Nej | 0 | Startposition for paging |
outputFormat | Nej | application/gml+xml; version=3.2 | Outputformatet på data (GML eller GeoJSON). Se afsnit 2.5 |
bbox | Nej | - | Bounding box for geometrisk filtrering (kan ikke kombineres med cql_filter). Se afsnit 2.7.1. |
cql_filter | Nej | - | CQL (Common Query Language) expression for attribut-/geometrisk filtrering (kan ikke kombineres med bbox). Se afsnit 2.7.2. |
sortBy | Nej | - | Navnet på feltet der ønskes sorteret på. Tilføj +D (descending) for omvendt sortering. |
GetFeature understøtter flere avancerede query-muligheder, såsom:
Eksempel:
| https://wfs.datafordeler.dk/BBR/BBR_WFS/1.0.0/WFS?service=WFS&version=2.0.0&request=GetFeature&typeName=tekniskanlaeg_current&count=100&outputFormat=application/json&apikey={YOUR_API_KEY} |
Læs mere om GetFeature og alle query-muligheder i GeoServer dokumentationen.
For en mere detaljeret beskrivelse af brugen af bbox- og cql_filter-parameteren, se afsnit 2.7.
WFS-tjenesterne understøtter to standard-outputformater der dækker forskellige anvendelsesbehov. Valg af format afhænger af hvilken type applikation eller GIS-software der skal forbruge data.
Format | MIME Type | Parameterværdi | Typisk anvendelse |
GML | application/gml+xml;version=3.2 | gml32 | Desktop GIS, arkivering, fuld præcision |
GeoJSON | application/json | application/json | Webapplikationer, JavaScript, REST APIs |
Outputformat specificeres via outputFormat-parameteren i GetFeature- og DescribeFeatureType-forespørgsler. Hvis ingen outputFormat-parameter angives, returneres data i henholdsvis GML format som standard for GetFeature, og som XSD-skema som standard for DescribeFeatureType.
For GetFeature returneres geografiske data i det valgte format (GML eller GeoJSON). For DescribeFeatureType returneres strukturbeskrivelsen enten som XSD-skema (standard) eller som JSON-skema når outputFormat=application/json specificeres.
GetCapabilities-metoden understøtter ikke outputFormat-parameteren og returnerer altid XML uanset hvilken værdi der angives.
GML bør vælges når:
GeoJSON bør vælges når:
For yderligere information om output formater i GeoServer se: WFS output formats
Entitetsbaserede WFS-tjenester håndterer bitemporal data gennem separate lag for aktuelle og historiske data. Alle entiteter med bitemporal datamodel eksponeres i to varianter, identificeret gennem endelsen på lagnavnet:
Det aktuelle lag, for eksempel bygning_current, returnerer kun features der er gyldige på nuværende tidspunkt. Dvs. de underliggende data filtreres automatisk på både virkningstid og registreringstid for at vise det aktuelle billede af data.
Det historiske lag, for eksempel bygning_hist, returnerer alle versioner af hver feature gennem tiden, inklusive både aktuelle og historiske versioner. Dette giver mulighed for at analysere hvordan data har ændret sig over tid. Det historiske lag giver mulighed for at filtrere på de bitemporale felter for at finde gyldige data i specifikke tidsperioder. De relevante felter er:
Man kan filtrere på disse felter ved brug af cql_filter-parameteren, som er beskrevet i afsnit 2.7.2.1.
For yderligere information om se Bitemporalitet på Datafordeleren.
De entitetsbaserede WFS-tjenester understøtter både attribut- og geometrisk filtrering når data hentes ved brug af GetFeature-metoden beskrevet i afsnit 2.4.3. Man kan filtrere på baggrund af udvalgte attributter ved brug af cql_filter-parameteren mens filtrering på baggrund af geospatial data kan gøres på en af to måder: ved brug af enten bbox- eller cql_filter-parameteren. Parametrene kan ikke benyttes samtidig. Brug af bbox-parameteren er beskrevet i afsnit 2.7.1, mens brug af cql_filter-parameteren er beskrevet i afsnit 2.7.2 nedenfor.
bbox-parameteren gør det muligt at søge efter features, der er indeholdt (eller delvist indeholdt) inden for en såkaldt bounding box. En bounding box er en rektangulær, geografisk afgrænsning, som angiver det område indenfor hvilket, der returneres features til anvenderen. Bounding box’en er defineret ved angivelse af to sæt af koordinater, som alle skal være inden for EPSG-25832 grænserne. Nedenfor er vist et eksempel på en bounding box for koordinaterne bbox=721148,617549,722618,6176355

Bemærk Billedet er kun en visualisering af bbox |
Med hensyn til hvilke hjørner af afgrænsningsboksen der skal angives, er det eneste krav, at et af de nederste hjørner (venstre eller højre) angives først. For eksempel nederste venstre og øverste højre, eller nederste højre og øverste venstre. I Figur 6 svarer koordinaterne (minX, minY) til nederst venstre og (maxX, maxY) til øverste højre. Man ville således få samme bounding box ved at angive koordinaterne maxX, minY og minX, maxY, hvilket svarer til nederste højre og øverste venstre hjørne.
Hvis man for eksempel vil finde tekniske anlæg inden for bounding box’en ovenfor, kan man benytte bbox-parameteren til at lave en filtrering på tekniskanlaeg_current-laget. Dette kan gøres ved følgende kald:
| https://wfs.datafordeler.dk/BBR/BBR_WFS/1.0.0/WFS?service=WFS&version=2.0.0&request=GetFeature&typeName=tekniskanlaeg_current&bbox=721148,617549,722618,6176355&apikey={YOUR_API_KEY} |
Bemærk bbox-parameteren kan ikke benyttes samtidig med cql_filter-parameteren. |
Kaldet returnerer en lang XML-fil med følgende data:
<?xml version="1.0" encoding="UTF-8"?> <wfs:FeatureCollection … > <wfs:member> <bbr_v001:tekniskanlaeg_current gml:id= … > # ID <bbr_v001:forretningshændelse>TekniskAnlæg</bbr_v001:forretningshændelse> <bbr_v001:forretningsområde>54.15.05.05</bbr_v001:forretningsområde> <bbr_v001:forretningsproces>25</bbr_v001:forretningsproces> <bbr_v001:id_namespace>http://data.gov.dk/bbr/tekniskanlæg</bbr_v001:id_namespace> <bbr_v001:id_lokalId>fa8c34e6-4d61-474f-969e-4565f4760121</bbr_v001:id_lokalId> <bbr_v001:kommunekode>0147</bbr_v001:kommunekode> # Frederiksberg kommune … # Flere properties </wfs:member> <wfs:member> … # Properties </wfs:member> … # Flere features </wfs:FeatureCollection> |
cql_filter-parameteren tilbyder en avanceret og fleksibel metode til at filtrere de features, der returneres fra en WFS-tjeneste. I modsætning til den simple bbox-filtrering, giver cql_filter mulighed for at formulere komplekse forespørgsler baseret på både attribut- og geospatiale data. Filtret skrives ved hjælp af OGC's Common Query Language (CQL).
Du kan læse mere om CQL og hvordan det kan bruges i GeoServers CQL Tutorial og dokumentation for ECQL.
Attributfiltrering giver mulighed for at udvælge features baseret på deres attributværdier, såsom tekststrenge, tal eller datoer. Filtret opbygges typisk som attribut-operator-værdi. Følgende operatorer understøttes:
Operator | Beskrivelsen |
· = (lig med) · <> (ikke lig med) · < (mindre end) · <= (mindre end eller lig med) · > (større end) · >= (større end eller lig med) | Sammenligningsoperatorer |
· (NOT) BETWEEN value1 AND value2 | Tjekker om en værdi er inden eller uden for et interval (value1, value2). |
· (NOT) LIKE · (NOT) ILIKE | Tjekker om en tekststreng (ikke) følger et mønster gennem simpel pattern-matching. LIKE bruger ”%” som wild-card-karakter. ILIKE laver case-insensitiv matching. |
· (NOT) IN | Tjekker om en værdi (ikke) er indeholdt i et sæt af værdier. |
· IS (NOT) NULL | Tjekker om en værdi (ikke) er null. |
Hvis man for eksempel vil finde tekniske anlæg der var gyldige pr. 1. januar 2023, kan man benytte cql_filter til at lave bitemporal filtrering på tekniskanlaeg_hist-laget. Dette kan gøres ved følgende kald:
| https://wfs.datafordeler.dk/BBR/BBR_WFS/1.0.0/WFS?service=WFS&version=2.0.0&request=GetFeature&typeName=tekniskanlaeg_hist&cql_filter=virkningFra <= '2023-01-01' AND (virkningTil IS NULL OR virkningTil > '2023-01-01') AND registreringTil IS NULL&outputFormat=application/json&apikey={YOUR_API_KEY} |
I dette kald skal cql_filter-filtrene læses således:
Som vist i kaldet ovenfor, kombineres de forskellige filtre ved hjælp af AND/OR-operatorer.
Bemærk at outputFormat-parameteren er sat til json, hvorfor kaldet returnerer en lang json-fil med følgende data:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"id": "tekniskanlaeg_hist.fid-6429244c_1989dfaf394_-32a4",
"geometry": null,
"geometry_name": "tek109Koordinat",
"properties": {
"forretningshændelse": "TekniskAnlæg",
"forretningsområde": "54.15.05.05",
"forretningsproces": "0",
"id_namespace": "http://data.gov.dk/bbr/tekniskanlæg",
"id_lokalId": "1039c906-7847-4300-b9c2-01cd132ea689",
"kommunekode": "0330",
"registreringFra": "2017-06-02T12:29:37Z",
"registreringsaktør": "BBR",
"registreringTil": null, # IS NULL
"virkningFra": "2012-03-09T07:15:38.180Z", # <= '2023-01-01'
"virkningsaktør": "Konvertering2017",
"virkningTil": null, # IS NULL
… # Flere properties
}
},
{
… # Properties
},
… # Flere features
]
} |
Udover attributfiltrering kan cql_filter også bruges til at filtrere features på baggrund af geospatiale data. Dette gøres i form af WKT-strenge (Well Known Text) som gives som input gennem cql_filter-parameteren. Disse WKT'er repræsenterer geospatiale data, enten i form af en koordinattype, en geometri-type eller lignende datatyper.
De mest almindelige typer af geometriske former er punkter, linjer og polygoner. Et punkt repræsenteres af et koordinatsæt med to eller tre værdier, afhængigt af om det er et punkt i to eller tre dimensioner. En linje repræsenteres af en liste af de punkter, der udgør linjen. En polygon repræsenteres af en liste de punkter, der udgør hjørnerne af polygonen, hvor første og sidste punkt i listen er identisk. Et eksempel på WKT-formatet for hver af de tre geometrityper i 2D, er vist nedenfor:

De entitetsbaserede WFS-tjenester understøtter en række forskellige geometriske operatorer. Alle operatorerne fremgår af Tabel 10: . Kombinationer af geometriske operatorer understøttes ved hjælp af tilhørende AND/OR-operatorer.
Operator | Beskrivelsen |
BBOX(geometri, minX, minY, maxX, maxY) | Tjekker om den angivne geometri overlapper med den angivne bounding box |
INTERSECTS(geometri, wkt) | Tjekker om den angivne geometri overlapper med den angivne WKT-geometri |
WITHIN(geometri, wkt) | Tjekker om den angivne geometri er indeholdt i den angivne WKT-geometri |
CONTAINS(geometri, wkt) | Tjekker om den angivne geometri indeholder i den angivne WKT-geometri |
DWITHIN(geometri, wkt, dist, units) | Tjekker om den angivne geometri og den angivne WKT-geometri maksimalt er den angivne distance ”dist” fra hinanden. ”dist” tager en numerisk værdi og angiver den maksimale distance mellem de to geometrier og ”units” er enheden distancen er angivet i. ”units” kan tage af følgende: feet, meters, statute miles, nautical miles, kilometeres |
Nedenfor er vist et eksempel på en WKT-geometri: POLYGON ((563436.97 6257781.63, 563505.88 6257908.45, 563623.98 6257788.20, 563472.62 6257744.47, 563436.97 6257781.63))

I dette eksempel bruges tek109Koordinat, som er geometrifeltet for tekniske anlæg (som vist i JSON-responset i afsnit 2.7.2.1). Hvis man for eksempel vil finde alle tekniske anlæg, hvor geometrien tek109Koordinat er indeholdt i polygonen oven for, kan man benytte WITHIN-operatorer til at lave en filtrering på tekniskanlaeg_current-laget. Dette kan gøres ved følgende kald:
https://wfs.datafordeler.dk/BBR/BBR_WFS/1.0.0/WFS?request=GetFeature&typeName=tekniskanlaeg_current&cql_filter=WITHIN(tek109Koordinat, POLYGON ((563436.97 6257781.63, 563505.88 6257908.45, 563623.98 6257788.20, 563472.62 6257744.47, 563436.97 6257781.63)))&apikey={YOUR_API_KEY} |
Kaldet returnerer en lang XML-fil med følgende data:
<?xml version="1.0" encoding="UTF-8"?> <wfs:FeatureCollection … > <wfs:member> <bbr_v001:tekniskanlaeg_current gml:id= … > # ID <bbr_v001:forretningshændelse>TekniskAnlæg</bbr_v001:forretningshændelse> <bbr_v001:forretningsområde>54.15.05.05</bbr_v001:forretningsområde> <bbr_v001:forretningsproces>5</bbr_v001:forretningsproces> … # Flere properties <bbr_v001:tek109Koordinat> <gml:Point srsName="urn:ogc:def:crs:EPSG::25832" srsDimension="3" gml:id= … > # ID <gml:pos>563494.18 6257813.71 0</gml:pos> </gml:Point> </bbr_v001:tek109Koordinat> … # Flere properties </wfs:member> … # Flere features </wfs:FeatureCollection> |
I de entitetsbaserede WFS-tjenester versioneres hvert register separat, og alle entiteter, der tilhører det samme register, versioneres under det samme versionsnummer som registret. Det vil sige, at DAR og BBR kan eksistere separat som DAR_WFS/1.0.0 og BBR_WFS/2.0.0. Men hvis BBR har en ændring til Bygning-entiteten i deres datamodel, vil alle entiteter i BBR blive opgraderet til BBR_WFS/3.0.0, og BBR_WFS/2.0.0 vil derefter efter en overgangsperiode blive udfaset.