Web Feature Service (WFS)

Dette beskriver, hvorledes WFS er implementeret i Kortforsyningen, herunder evt. afvigelser, begrænsninger og udvidelser. Der henvises til OGC WFS specifikationen for nærmere beskrivelse af terminologi og funktionalitet.

WFS er en OGC-standard for tjenester, der udstiller data i et specialiseret XML-format, GML. For en nærmere gennemgang af WFS henviser vi til OGC-standarden Web Feature Service Implementation Specification version 1.0.0 (OGC 02-058) og 1.1.0 (OGC 04-094).

 

Adgang til WFS services

For at værne om opppetid og performance er WFS services ikke er frit tilgængelige. Dette gælder også selv om de data der distribueres er frie data.

Hvis du har styr på hvordan man benytter en WFS har du mulighed for at få adgang til WFS'ere med frie data ved at kontakte os på http://support.kortforsyningen.dk

Understøttelse af versioner 

WFS versionUnderstøttes af KortforsyningenBemærkninger
1.0.0JaGML2
1.1.0JaGML3 Simple Feature Profile

Kortforsyningens WFS-tjenester er navngivet med postfix "_gml2" eller "_gmlsfp" svarende til hhv. GML2 og GML3 Simple Feature Profile. Kortforsyningens GML2-tjenester er beregnet til at blive brugt med WFS 1.0.0, og GML3-tjenesterne er beregnet til WFS 1.1.0.

Parameteren VERSION er obligatorisk i forespørgsler til Kortforsyningens WFS-tjenester.

Understøttelse af GetFeature

I GetFeature-forespørgsler kan man begrænse sin søgning på forskellige måder. I WFS-standarden er parametrene BBOX, FILTER og FEATUREID gensidigt udelukkede, så en GetFeature-forespørgsel skal kun indeholde én af de tre parametre. Så hvis man ønsker at kombinere en bounding box og et filter, skal man kun benytte FILTER og inkludere bounding boksen i filteret.

Når man benytter et filter i GetFeature-forespørgsler, skal man være opmærksom på at angive XML-namespaces korrekt og have rigtige den struktur på filteret.

I maj 2012 skiftede Kortforsyningen serverplatform for WFS-tjenesterne. I den forbindelse blev der udarbejdet et dokument med en række forskelle på den tidligere og den nuværende platform: Vejledning om udformning af forespørglser med filter på ny WFS-platform.

Begrænsning

Af driftmæssige hensyn er der en begrænsning på 5000 features i svar fra Kortforsyningens WFS-tjenester. Nogle tjenester har dog en begrænsning på 10.000 features, det er nyere tjenester. Det er planen, at de øvrige WFS-tjenester skal opdateres, og i denne opdatering sættes featurebegrænsningen op til 10.000. På kortforsyningen.dk meldes ud, når alle WFS-tjenester er opdateret.

I de brugsscenarier, vi tiltænker WFS, vil en enkelt forespørgsel ofte hente et antal features, der ligger et godt stykke under grænsen på 5000 features.

Overskrides grænsen på de 5000 features vil man opleve en mangelfuld respons. F.eks kan det forespurgte område være reduceret i sin udstrækning eller der kan mangle temaer.

Forespørgsler, der ikke er afsluttet i løbet af 3 minutter i databasen, vil blive stoppet.

For at få et brugbart svar indenfor de 5000 features kan det anbefales at der enten hentes færre temaer ad gangen eller at områdets udstrækning reduceres.

Rendering af kortvisninger baseret på WFS-tjenester på webløsninger eller systemer med mange bruger, anses ikke for at være god arbejdsskik.

Dette vil i mange tilfælde belaste databaserne i så høj grad, at svartiderne forringes for alle brugere af Kortforsyningen. 

Ønsker man kortvisning på webløsninger eller systemer med mange brugere henviser vi til WMTS og WMS tjenester.

Vi forbeholder os ret til at fjerne rettigheder til WFS-services for bruger, som anvender WFS-services uhensigtsmæssig.

 

Eksempler på  WFS requests -  inklusiv Filter Encoding(FE)

 

Maksimalt antal fortidsminder i et rektangulært område (topo_geo_gml2 GetCapabilities)

Få returneret maksimalt 3 fortidsminder i et rektangulært geografisk område.

http://services.kortforsyningen.dk/service?servicename=topo_geo_g
ml2&VERSION=1.0.0&SERVICE=WFS&REQUEST=GetFeature&TYPENAME=km
s:Navnefortidsminde&BBOX=550000,6220000,560000,6230000,EPSG:
25832&maxfeatures=3

Fortidsminder i et rektangulært område (topo_geo_gml2 GetCapabilities)

Få returneret alle fortidsminder i et rektangulært geografisk område. Bemærk, at nogle objekter ikke returneres, hvis det samlede antal objekter i svaret overstiger maksimumsgrænsen.

http://services.kortforsyningen.dk/service?servicename=topo_geo
_gml2&VERSION=1.0.0&SERVICE=WFS&REQUEST=GetFeature&TYPENAME=
kms:Navnefortidsminde&BBOX=550000,6220000,560000,6230000,EPS
G:25832&

Vindmøller i Danmark (topo_geo_gml2 GetCapabilities)

Få returneret alle vindmøller i Danmark (når der står Danmark er det fordi, datasættet omfatter Danmark samt at der ikke er angivet nogen BBOX). Bemærk, at nogle objekter ikke returneres, hvis det samlede antal objekter i svaret overstiger maksimumsgrænsen.

http://services.kortforsyningen.dk/service?servicename=topo_geo
_gml2&VERSION=1.0.0&SERVICE=WFS&REQUEST=GetFeature&TYPENAME=
kms:Vindmoelle&

Alle Motorveje (topo_geo_gml2 GetCapabilities)

Få returneret alle motorveje i Danmark (når der står Danmark er det fordi, datasættet omfatter Danmark samt at der ikke er angivet nogen BBOX). Bemærk, at nogle objekter ikke returneres, hvis det samlede antal objekter i svaret overstiger maksimumsgrænsen.
 

http://services.kortforsyningen.dk/service?servicename=topo_geo
_gml2&VERSION=1.0.0&SERVICE=WFS&REQUEST=GetFeature&TYPENAME=
kms:Motorvej&

 

Filter Encoding (FE

 

Matrikelregister for matrikelnummer (mat_gml2 GetCapabilities)

Matrikelregister for matrikelnummer givet ved matrikelnummer og ejerlavskode. Inden borttagning af whitespace og URL-encoding ser "Filter"-parameteren sådan ud:

<Filter xmlns="http://www.opengis.net/ogc">
  <And>
    <PropertyIsEqualTo>
      <PropertyName>kms:matrikelnummer</PropertyName>
      <Literal>32</Literal>
    </PropertyIsEqualTo>
    <PropertyIsEqualTo>
      <PropertyName>kms:landsejerlavskode</PropertyName>
      <Literal>2005662</Literal>
    </PropertyIsEqualTo>
  </And>
</Filter> 

Bemærk, at dette eksempel benytter en fælleslod, hvilket illustrerer hvordan disse optræder dubleret (i dette tilfælde 3 gange) i GML 2.1.2. Benyttes i stedet "&servicename=mat_gmlsfp" og "&version=1.1.0", undgås dette, men det kræver at klientsoftwaren understøtter GML 3.1 Simple Features Profile.

http://services.kortforsyningen.dk/service?service=WFS&version=1.
0.0&servicename=mat_gml2&Request=GetFeature&typename=kms:Jor
dstykke&Filter=%3CFilter%20xmlns%3D%22http%3A//www%2Eopengis
%2Enet/ogc%22%3E%3CAnd%3E%3CPropertyIsEqualTo%3E%3CPropertyN
ame%3Ekms:matrikelnummer%3C/PropertyName%3E%3CLiteral%3E32%3
C/Literal%3E%3C/PropertyIsEqualTo%3E%3CPropertyIsEqualTo%3E%
3CPropertyName%3Ekms:landsejerlavskode%3C/PropertyName%3E%3C
Literal%3E2005662%3C/Literal%3E%3C/PropertyIsEqualTo%3E%3C/A
nd%3E%3C/Filter%3E

Hent SamletFastEjendom med givent SFE ejendomsnummer (mat_gmlsfp GetCapabilities)

Objekttypen kms:SamletFastEjendom understøtter (pga. databasedesignet) ikke geografiske søgninger, dvs. brugen af f.eks. Bbox-parameteren resulterer i fejlmeddelelsen "ORA-13226: interface not supported without a spatial index". Derimod kan man hente SamletFastEjendom vha. et (ikke-geometrisk) filter, som f.eks. dette.

http://services.kortforsyningen.dk/service?service=WFS&version=1.
0.0&servicename=mat_gmlsfp&Request=GetFeature&typename=kms:S
amletFastEjendom&Filter=%3CFilter%20xmlns%3D%22http%3A//www.
opengis.net/ogc%22%3E%3CPropertyIsEqualTo%3E%3CPropertyName%
3Ekms:sfe_Ejendomsnummer%3C/PropertyName%3E%3CLiteral%3E1301
673%3C/Literal%3E%3C/PropertyIsEqualTo%3E%3C/Filter%3E

Spatial filter - Jordstykke som indeholder et givent punkt (mat_gmlsfp GetCapabilities)

Denne forespørgsel besvarer spørgsmålet: "Hvilket Jordstykke står jeg på, når min position har disse koordinater?"

<Filter>
  <Contains>
    <gml:Point srsName="EPSG:25832">
      <gml:coordinates>524072.08,6076164.77</gml:coordinates>
    </gml:Point>
  </Contains>
</Filter>

http://services.kortforsyningen.dk/service?service=WFS&version=1.
1.0&servicename=mat_gmlsfp&Request=GetFeature&typename=kms:J
ordstykke&filter=%3cFilter+xmlns%3d%22http%3a%2f%2fwww.openg
is.net%2fogc%22%3e%3cContains%3e%3cPropertyName%3ekms%3ageom
etri%3c%2fPropertyName%3e%3cgml%3aPoint+xmlns%3agml%3d%22htt
p%3a%2f%2fwww.opengis.net%2fgml%22+srsName%3d%22EPSG%3a25832
%22%3e%3cgml%3acoordinates%3e524072.08%2c6076164.77%3c%2fgml
%3acoordinates%3e%3c%2fgml%3aPoint%3e%3c%2fContains%3e%3c%2f
Filter%3e

Matrikelregister for jordstykker som overlapper en vilkårlig polygon. (mat_gmlsfp GetCapabilities)

Man kan bruge en vilkårlig polygon som filter. Her er brugt en polygon med både indre og ydre grænse:

<Filter>
  <Overlaps>
    <PropertyName>kms:geometri</PropertyName>
    <gml:Polygon srsName="EPSG:25832">
      <gml:outerBoundaryIs>
        <gml:LinearRing>
          <gml:posList>
            601040 6190053
            600951 6190084
            600947 6190284
            601134 6190268
            601265 6190205
            601232 6190053
            601040 6190053
          </gml:posList>
        </gml:LinearRing>
      </gml:outerBoundaryIs>
      <gml:innerBoundaryIs>
        <gml:LinearRing>
          <gml:posList>
            601104 6190140
            601106 6190211
            601209 6190211
            601208 6190123
            601104 6190140
          </gml:posList>
        </gml:LinearRing>
      </gml:innerBoundaryIs>
    </gml:Polygon>
  </Overlaps>
</Filter>

Eksemplet benytter den tjeneste som understøtter WFS 1.1.0 og leverer GML 3.1 Simple Features Profile, men kan let modificeres hvis man hellere vil benytte WFS 1.0.0 og få leveret GML 2.1.2: Skift tjeneste til "&servicename=mat_gml2" og juster "version"-parameteren til "&version=1.0.0". Bemærk dog at dette har bieffekter, f.eks. Vil en fælleslod blive dubleret, sådan at den forekommer én gang en gang for hver ejendom den er med i.

http://services.kortforsyningen.dk/service?service=WFS&version=1.
1.0&servicename=mat_gmlsfp&Request=GetFeature&typename=kms:J
ordstykke&Filter=%3cFilter+xmlns%3d%22http%3a%2f%2fwww.openg
is.net%2fogc%22%3e%3cOverlaps%3e%3cPropertyName%3ekms%3ageom
etri%3c%2fPropertyName%3e%3cgml%3aPolygon+xmlns%3agml%3d%22h
ttp%3a%2f%2fwww.opengis.net%2fgml%22+srsName%3d%22EPSG%3a258
32%22%3e%3cgml%3aouterBoundaryIs%3e%3cgml%3aLinearRing%3e%3c
gml%3aposList%3e601040+6190053+600951+6190084+600947+6190284
+601134+6190268+601265+6190205+601232+6190053+601040+6190053
+%3c%2fgml%3aposList%3e%3c%2fgml%3aLinearRing%3e%3c%2fgml%3a
outerBoundaryIs%3e%3cgml%3ainnerBoundaryIs%3e%3cgml%3aLinear
Ring%3e%3cgml%3aposList%3e601104+6190140+601106+6190211+6012
09+6190211+601208+6190123+601104+6190140%3c%2fgml%3aposList%
3e%3c%2fgml%3aLinearRing%3e%3c%2fgml%3ainnerBoundaryIs%3e%3c
%2fgml%3aPolygon%3e%3c%2fOverlaps%3e%3c%2fFilter%3e

Afgræns med rektangulært geografisk udsnit (BBOX) (topo_geo_gml2 GetCapabilities)

Få alle 6+ meter brede veje i et afgrænset geografisk område. Bemærk URL encoding af filtret!

<Filter xmlns="http://www.opengis.net/ogc">
  <BBOX>
    <PropertyName>kms:geometri</PropertyName>
    <gml:Box xmlns:gml="http://www.opengis.net/gml">
      <gml:coordinates>719514.134172,6176635.743663 723009.334589,6180150.635351</gml:coordinates>
    </gml:Box>
  </BBOX>
</Filter>

http://services.kortforsyningen.dk/service?servicename=topo_geo
_gml2&version=1.0.0&service=WFS&request=GetFeature&typename=
kms:Vej_3-6meter&filter=%3CFilter%20xmlns%3D%22http%3A//www.
opengis.net/ogc%22%3E%3CBBOX%3E%3CPropertyName%3Ekms:geometr
i%3C/PropertyName%3E%3Cgml%3ABox%20xmlns%3Agml%3D%22http%3A/
/www.opengis.net/gml%22%3E%3Cgml%3Acoordinates%3E719514.1341
72%2C6176635.743663%20723009.334589%2C6180150.635351%3C/gml%
3Acoordinates%3E%3C/gml%3ABox%3E%3C/BBOX%3E%3C/Filter%3E