24 August 2014

Swisstopo stellt eine Programmierschnittstelle (API) zur Verfügung mit der man Webseiten mit Swisstopo-Karten verschönern kann. Diese API ist sauber dokumentiert und neben der eigentlichen Javascript-API stehen ebenfalls auch REST-Schnittstellen online.

Interessant ist vor allem der Suchdienst, mit dem man neben Adressen und administrativen Einheiten (Kantone, Bezirke) auch Grundstücke suchen kann. Folgender Request liefert Informationen zum Grundstück Nr. 2585 in Solothurn:

Leider darf die Adresssuche nur von der Bundesverwaltung gebraucht werden. Sucht man nach einer bestimmten Adressen, wird zwar eine Antwort geliefert, diese beinhaltet aber keine Georeferenzierung (kein geom_st_box2d Attribut):

Ebenfalls gesucht werden können Layer, die in der GeoAdmin API zur Verfügung stehen. Dieser Request liefert Layer zur Thematik Fixpunkte:

Zu guter Letzt lassen sich mit dem Suchdienst auch Features suchen, z.B. den Fixpunkt 11277510:

Nicht alle Layer der GeoAdmin API sind durchsuchbar.

Mit diesen REST-Schnittstellen kann ein QGIS-Plugin erstellt werden, das ähnliche Funktionen bietet, wie die Suchfunktion auf map.geo.admin.ch. Dh. Lokalisationen können gesucht werden und es kann an den ausgewählten Ort gezoomt werden. Angebotene Layer können gesucht und in QGIS hinzugefügt werden. Features von durchsuchbaren Layer können gesucht werden und ein Popup-Fenster erscheint, falls etwas ausgewählt wurde.

Screenshots:

Parzellensuche
Layersuche
Featuresuche

Die Layersuche resp. das anschliessende Hinzufügen des Layers in QGIS ist noch unbefriedigend gelöst. In den Plugineinstellungen lässt sich wählen, ob der Layer als WMS oder WMTS hinzugefügt werden soll:

Provider

Einige der Layer sind nur als WMS, andere nur als WMTS vorhanden. So wird zuerst also versucht den Layer mit dem Provider hinzuzufügen, den man in den Einstellungen gewählt hat. Klappt das nicht, wird der andere Provider gewählt.

Das führt auch gleich zum Thema/Problem «Terms of use». Der WMTS-Dienst darf gemäss Webseite nicht in Desktop-Applikationen verwendet werden: "Nur für Websites, kein Desktop-Zugriff". Wird beim Anfordern der Kachel kein Referer mitgeschickt, verweigert der Server die Auslieferung der Kachel. Zwar kann man sich mit einer Domain gratis registrieren aber die Desktop-Applikation hat halt keine Domain.

Bleibt der WMS-Dienst: Gewisse Layer sind nicht frei verfügbar (z.B. Pixelkarten) und nicht im «normalen» BGDI-WMS enthalten. Für diese Dienste gibt es einen zweiten WMS-Dienst. 5000 Megapixel/Jahr sind gratis. Leider lässt sich mit keiner REST-Schnittstelle exakt eruieren, ob ein Layer als WMS und/oder als WMTS verfügbar ist. So meint das Plugin, dass das Orthofoto (SWISSIMAGE) nur als WMTS-Layer verfügbar ist, da in den Metainformation beim Layer ch.swisstopo.swissimage das Attribut wmsUrlResource fehlt. Login und Passwort für den geschützten WMS lassen sich in den Plugineinstellungen speichern. Es macht den Anschein, dass entweder mein Plugin, QGIS oder der passwortgeschützte WMS von Zeit zu Zeit Probleme beim Verbinden verursacht. Erscheint in QGIS die Fehlermeldung Error: Layer is not valid. lohnt sich ein erneuter Versuch (irgend ein «Redirect loop detected»-Problem).

Das Plugin GeoAdmin Search liegt im QGIS Plugin Repository. Quellcode gibts hier: https://bitbucket.org/edigonzales/qgis_geoadminsearch.

Posted by Stefan Ziegler. | GeoAdmin , API , QGIS , QGIS-Plugin , WMS , WMTS