Neulich bekam ich den Auftrag einen Web Feature Service etwas genauer unter die Lupe zu nehmen. Es sollte geprüft werden, ob der Dienst den seinen auch wirklich tut und was dieser für Merkmale besitzt.
Dabei ging es um einen WFS der Bundesanstalt für Kartografie und Geodäsie (BKG): der WFS Altimeter.

Dieser Dienst liefert nach der Beschreibung zu einer beliebigen Koordinate in Deutschland die angegebene Koordinate und eine Höheninformation zurück. Die Höheninformation basiert dabei auf einem deutschlandweiten DGM25 (Dokumentation)…

Im Rahmen meiner derzeitigen Tätigkeit sollte ich den Dienst testen. Nach Erhalt einer auf meinen Arbeitgeber zugeschnittenen GUID, die mit einem Ablaufdatum versehen war ging’s los.

(Nein, ich werde die GUID nicht veröffentlichen – stattdessen fungiert an dieser Stelle ein „GUID“ als Platzhalter).

Die Grundadresse ist wahrscheinlich für alle Kunden gleich – sie lautet:

http://gdz.bkg.bund.de/wfs_altimeter__GUID

Nach einem GetCapabilities auf den WFS lieferte dieser die nachfolgenden Infos zurück:

– WFS-Version nur als 1.1.0 ansprechbar (nicht in der Version 1.0.0)

– nur als WFS nicht aber als WMS ansprechbar

– Input und Rückgabe der Koordinaten ausschließlich in EPSG:31467 (DHDN Gauss Krüger Zone 3)

– Rückgabeformat lediglich GML3.1.1

Eine Abfrage mit einer bestimmten Höheninformation sieht im XML-Post-Format folgendermaßen aus:

<wfs:GetFeature service="wfs" version="1.1.0" outputFormat="text/xml; subtype=gml/3.1.1" 
maxFeatures="10"
xmlns:gdz="http://www.geodatenzentrum.de/altimeter"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
<wfs:Query typeName="gdz:Altitude">
<ogc:Filter>
<ogc:Equals>
<ogc:PropertyName>gdz:location</ogc:PropertyName>
<gml:Point><gml:pos>3651650.00 5971150.00</gml:pos></gml:Point>
</ogc:Equals>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>

Dieses XML-Schnippsel kann auf einer einfachen Javaapplikation des BKG abgefeuert werden, bei der man auch prompt die Antwort des Dienstes geliefert bekommt.

Die Antwort des WFS Altimeter sieht anschließend so aus:

<?xml version="1.0"?>
<wfs:FeatureCollection    numberOfFeatures="1"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gdz="http://www.geodatenzentrum.de/altimeter"
xmlns:wfs="http://www.opengis.net/wfs"
xsi:schemaLocation="http://www.geodatenzentrum.de/altimeter http://gdz.bkg.bund.de/wfs_altimeter?service=wfs&version=1.1.0&request=DescribeFeatureType&typename=Altitude">
<gml:featureMember>
<gdz:Altitude>
<gdz:location>
<gml:Point><gml:pos>3651650.0 5971150.0</gml:pos></gml:Point>
</gdz:location>
<gdz:height>44.96</gdz:height>
</gdz:Altitude>
</gml:featureMember>
</wfs:FeatureCollection>

Visualisieren lässt sich das GML als GML3-Objekt momentan leider nur in speziellen Viewern (z.B. Gaia).  Andere Desktop GISs haben mit der 3er Version vom GML wohl noch ihre Probleme.

Spannender war für mich aber darüber hinaus die Idee, erstens die Kommunikation mit dem Dienst mit Python anzupacken und in einem zweiten Schritt ein Script zu schreiben, mit dem man eine ganze Liste von Koordinaten mit Höheninformationen anreichern kann. Quasi eine Art Geocoding für die Höhe.