Immer mehr Online-Kartendienste setzen auf Open-Source-Tools. Dieser Artikel stellt mit Open Layers, Mapbender und Mapfish die drei bekanntesten vor und zeigt ihre Einsatzgebiete.
Geomarketing, Umsatz- und Bedarfsanalysen, Informationen für Touristen und Bürger: Auf mehr und mehr größeren Webseiten tauchen interaktive Karten auf. Google trat den Boom mit Maps, Earth und Street View los und für viele Anwender ist es schon selbstverständlich, das Hotel “um die Ecke” schnell übers Internet oder Smartphone ausfindig zu machen und raumbezogene Daten übersichtlich in klick-, pan- und zoombaren Karten zu durchforsten.
Dieser Artikel untersucht drei ausgewählte Produkte aus dem Bereich der Geo-Informatik, mit denen sich kartenbasierte Anwendungen einfach und professionell erstellen lassen: Mapbender [1], Open Layers [2] und Mapfish [3].
Die Programme verfolgen zwar unterschiedliche Ansätze, lassen sich aber auch hervorragend kombinieren. Denn nur auf den ersten Blick erfüllen sie den gleichen Zweck, Karten anzuzeigen und dem Benutzer grundlegende Navigationsmöglichkeiten zu bieten. Viele Unterschiede manifestieren sich eher im Inneren des Webservers.
Open Layers
Open Layers haben die Initiatoren als Alternative zu den proprietären Google-Maps-Lösungen entwickelt, es liegt mittlerweile in Version 2.10 vor. Unkompliziert erlaubt es dynamische Karten auf der eigenen Webseite. Die Hauptmotivation der Entwickler ist die Benutzerfreundlichkeit, was vor allem dem Einsatz von Kachelungsdiensten zu verdanken ist (siehe Kasten “Bildkacheln oder Webservice?”). Auch wenn Open Layers Dutzende anderer Formate nutzt (Abbildung 1) und viele moderne GIS-Standards beherrscht, haben solche Kachel-Services Vorteile: Sie stellen die Karten über einfache und bewährte Verzeichnisdienste eines Webservers bereit und gewähren so eine hohe Skalierbarkeit.
Bildkacheln oder Webservice?
In Web-basierten Kartendiensten stellt sich vor allem bei Vektordaten häufig die Frage, ob die Software die vorliegenden Geo-Informationen nativ darstellen und per standardisiertem Web Map Service (WMS, [4]) einbinden soll oder ob sie fertige, vorgerechnete Kartenkacheln nutzt, so wie Google Maps das macht.
Immer aktuell oder immer schnell?
WMS-Dienste greifen bei jedem Kartenaufruf auf die Datenquelle zu, die Darstellung ist also immer aktuell. Kacheln dagegen können keine dynamischen Daten enthalten. Wer also sich schnell ändernde Inhalte visualisieren will, für den hat die Kachelung eher Nachteile.
Mit Geo Web Cache [5] gibt es zwar eine von mehreren Kachelungslösungen, die bei geänderten Daten bis auf den Server durchgreifen. Das hebelt allerdings die Vorteile schneller Antwortzeiten und überschaubarer Netzlasten mindestens teilweise wieder aus, von der zusätzlichen Komplexität einer weiteren Server-Softwarekomponente ganz zu schweigen.
Koordinatensysteme und Projektionen
Ein weiterer klarer Vorteil des WMS-Standards ist die Unterstützung unterschiedlicher Koordinatensysteme und Kartenprojektionen aus einer Datenquelle. Vereinfacht gesagt kann ein Datenbestand, der beispielsweise im metrischen Koordinatensystem Gauß-Krüger vorliegt (wie bei vielen Katasterdaten der Regelfall, [6]), auch in einer anderen Projektion auf der Karte erscheinen. Die Software rechnet ihn on the Fly um und stellt auf Wunsch auch unterschiedliche Datenbestände überlagernd dar.
Bei gekachelten, also vorab in Rasterbilder umgewandelten Daten muss der Server dagegen für jedes Koordinatensystem und jede Projektion einen eigenen Bestand an Rasterkacheln anlegen und vorhalten. Das führt schnell zu sehr großen Datenmengen auf dem Webserver, deren Erzeugung bei höheren Zoomstufen Stunden in Anspruch nimmt, bei großen Projekten auch Tage.
Auch hier helfen zwar Programme wie Geo Web Cache oder Mapproxy [7], allerdings bedarf es beim Planen einer Kartenanwendung einer gründlichen Untersuchung, ob die Vor- oder die Nachteile eines gekachelten Dienstes überwiegen. Eine generelle Aussage dazu gibt es nicht, es hängt ganz vom Datenbestand und Einsatzzweck der Anwendung ab. Jeder Webseitenbetreiber muss selbst abwägen, ob er die eigenen Daten hochperformant als Kacheln oder hochdynamisch als WMS-Dienst an den Browser ausliefern möchte.

Abbildung 1: Open Layers ist nicht auf Geodaten beschränkt, sondern dient auch als komfortabler Viewer für vielerlei Bildformate, hier für ein Mandelbrot-Fraktal.
Open Layers ist im Grunde eine Javascript-Bibliothek, die Karten in andere Webanwendungen einbettet. Die Grundfunktionen orientieren sich an denen von Google Maps, übertreffen diese jedoch in einigen Bereichen. Zoom-Funktion mit Mausrad, Slippy-Map, Kachelung, Web-Map-Service-Unterstützung (WMS, [4]), aber auch temporäre Objekte und eine umfangreiche Web-basierte Rendering-Engine gehören dazu.
Die Konfiguration erfolgt über eine recht einfache Syntax, die der Administrator in einer HTML-Seite hinterlegt. Listing 1 zeigt das wohl einfachste Hallo-Welt-Beispiel aus der Dokumentation, eine Weltkarte im Vollbild, generiert aus WMS-Links. Für kompliziertere Beispiele sind gute Javascript-Kenntnisse erforderlich. Mit steigender Funktionalität der Anwendungen kann das schnell recht anspruchsvoll werden.
Listing 1
openlayers.html
01 <?xml version="1.0" encoding="iso-8859-1"?>
02 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
03 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
04 <html xmlns="http://www.w3.org/1999/xhtml" lang="EN">
05 <head>
06 <style>
07 html,body {
08 height: 99%;
09 width: 99%;
10 }
11 #map {
12 width: 100%;
13 height: 100%;
14 border: 1px solid black;
15 }
16 </style>
17 <script src='http://openlayers.org/api/OpenLayers.js'></script>
18 </head>
19 <body>
20 <div id='map'></div>
21 <script type="text/javascript">
22 var map = new OpenLayers.Map('map',{maxResolution: 0.703125} );
23 var wmscURL = [
24 "http://wmsc1.terrapages.net/getmap?",
25 "http://wmsc2.terrapages.net/getmap?",
26 "http://wmsc3.terrapages.net/getmap?",
27 "http://wmsc4.terrapages.net/getmap?"
28 ];
29 var terrapagesStreetLayer = new OpenLayers.Layer.WMS( 'TerraPages Street',wmscURL, {layers: 'UnprojectedStreet', format: 'image/jpeg' }, {buffer: 1, isBaseLayer: true} );
30 map.addLayer(terrapagesStreetLayer);
31 map.zoomToMaxExtent();
32 </script>
33 </body>
34 </html>
Als reiner Javascript-Kartenviewer ist Open Layers nicht mit Mapbender oder Mapfish zu vergleichen. Diese beiden Projekte decken ein viel breiteres Spektrum ab und sind sich konzeptionell ähnlicher: Sowohl Mapfish als auch Mapbender bestehen beispielsweise aus einer Client- und einer Serverkomponente.
Mapbender
Mapbender ([8], Abbildung 2) ist das älteste der drei Projekte und als mandantenfähiger Kartenviewer konzipiert, der eine einfache Administration per Weboberfläche erlaubt. Er zielt auf Anwender, die große Mengen an Kartendiensten einer Vielzahl von Benutzern in unterschiedlichen Konfigurationen zur Verfügung stellen möchten, aber selbst nicht programmieren wollen. Mapbender ist quasi das CMS für Geo-Inhalte. Sowohl die eingebundenen Datendienste als auch bestimmte Funktionen wie das Editieren oder das Hinzuladen weiterer Dienste lassen sich einzelnen Nutzern oder Nutzergruppen (Rollen) zuordnen. Damit das klappt, müssen die Dienste den gängigen Standards und Normen im GIS-Bereich entsprechen, also den Vorgaben der ISO sowie des Open Geospatial Consortiums (OGC).

Abbildung 2: Mapbender wird gerade vollständig überarbeitet, seine Stärken liegen im unkomplizierten Einbinden externer Datenquellen. Die Abbildung zeigt das Geoportal für Fahrradtouristen in Rheinland-Pfalz.
Als Basis bedarf es eines Webservers mit PHP, MySQL oder PostgreSQL und einer Datenbank mit dem Namen »mapbender« . Nach ein wenig Konfigurationsarbeit (gut dokumentiert im Mapbender-Wiki) trägt der Admin in der Datei »mapbender.conf« den Datenbank-Server und -Port sowie Zugangsdaten ein (in der neuesten Version übernimmt das ein GUI) und spezifiziert gegebenenfalls Mailserver, Logging-URLs und Modulpfade:
define("DBSERVER", "Host");
define("PORT", "Port");
define("DB", "Database");
define("OWNER", "Owner");
define("PW", "Password");
Externe Geodatendienste bindet der Anwender im Web-GUI per Mausklick ein, in der Regel kommen hier die langen WMS-URLs zum Einsatz.
Mapfish
Das Projekt Mapfish ist das jüngste im Vergleich und bietet Software-Entwicklern ein Framework zur Erstellung komplexer Web-GIS-Anwendungen (Abbildung 3). Mapfish unterstützt zahlreiche Programmiersprachen und kombiniert etablierte Komponenten aus dem Open-Source-Bereich zu einem Stack. Dazu zählen Datenbankadapter wie SQL Alchemy [9], Hibernate oder die mächtige Javascript-Bibliothek Ext JS [10] zur Oberflächenerstellung. Mapfish kann auch Open Layers als Komponente zur Kartendarstellung heranziehen.

Abbildung 3: Mapfish im Einsatz im Kanton Solothurn. Das umfangreiche Framework glänzt mit API, Erweiterungen und einem Editor, der die Änderungen in die Daten auf dem Server schreibt.
Der Kartenfisch setzt auf Python 2.5 oder 2.6, der Admin installiert es über ein Skript von der Webseite mit »python go-mapfish-framework-1.2.py –no-site -packages env« . Das richtet die Umgebung Env ein, das Kommando »source env/bin/activate« aktiviert sie. In dem darauf folgenden Prompt »(env)« prüft Pythons »paster« -Kommando den Erfolg der Installation (Listing 2).
Listing 2
paster create –list-templates
01 Available templates: 02 basic_package: A basic setuptools-enabled package 03 mapfish: MapFish application template 04 mapfish_client: MapFish client plugin template 05 paste_deploy: A web application deployed through paste.deploy 06 pylons: Pylons application template 07 pylons_minimal: Pylons minimal application template
Die umfangreiche Javascript-Toolbox bindet der Anwender mit dem Paster ein, ebenso die Webservices, für die eine Post-GIS-Datenbank notwendig ist. Die Layer-Konfiguration findet dabei in ».ini« -Dateien statt, alles fein säuberlich dokumentiert auf [3].
Die Unterschiede
Open Layers ist eine Javascript-Bibliothek für Webentwickler, Mapbender ein Softwarepaket zum Management von Diensten und Nutzern in Geoportalen, Mapfish das Entwicklerframework für komplexe Web-GIS-Anwendungen. Alle drei lassen sich auch in den anderen Kontexten einsetzen, was aber meist erheblichen Mehraufwand verursacht.
Mapfish besteht aus mehreren Komponenten, Open Layers ist ein integraler Bestandteil davon. Dazu kommen eigene Javascript-Dateien und Geo-Ext-Komponenten [11]. Das sind mächtige, mit der Ext-JS-Javascript-Bibliothek entwickelte Widgets für Open Layers. Auch Geo Ext lässt sich durch die User Extensions um eigene Widgets erweitern. Mapfish ist in HTML und Javascript programmiert, ein eigenes API ist ebenfalls enthalten und für verschiedene Programmiersprachen ausgelegt.
Der Mapbender-Client bringt ebenfalls eigenes Javascript mit, das auf der schlanken Jquery-Bibliothek [12] basiert. Standardmäßig nutzt er seinen eigenen Kartenviewer, die Widgets wie die Suchmodule oder zur Digitalisierung fußen auf Jquery-UI-Komponenten, einer Bibliothek aus populären Jquery-Plugins, die sich mit dem Jquery UI Themeroller [13] gestalten lassen. Auch Open Layers kann als Kartenviewer arbeiten, das aber unterstützen noch nicht viele Mapbender-Widgets. Auch wenn das Erstellen einer Anwendung ohne Programmierkenntnisse über eine Weboberfläche vonstatten geht, erfordert der Prozess doch einige Kenntnisse in der Mapbender-eigenen Anwendungslogik.
Daten editieren mit dem Mapfish-Server
Der Mapfish-Server erlaubt es, räumliche Daten über eine REST-Schnittstelle einzufügen, zu aktualisieren, abzufragen und zu löschen. Damit unterscheidet sich Mapfish stark von Mapbender, das keine eigene Geodaten-Haltung hat und verteilte Architekturen bedient. Das REST-Protokoll von Mapfish ist sowohl in Python, PHP und Java als auch in Ruby implementiert. Der Mapfish-Server erweitert das Python-Framework Pylons [14] und benutzt GIS-Bibliotheken wie Shapely [15] oder das Python-SQL-Toolkit SQL Alchemy [9].
Der Mapbender-Server ist in PHP implementiert und orchestriert oder administriert außer OGC-konformen Diensten auch Benutzer und Applikationen. Dadurch kann jeder berechtigte User Anwendungen erzeugen oder bearbeiten und anderen Benutzern Zugriff gewähren. Applikationen bestehen neben einem Kartenviewer und Widgets aus Diensten wie OGC WMS und WFS. Anders als Mapfish nutzt Mapbender ausschließlich standardisierte Dienste (transaktionale Web Feature Services), um Geometrien zu suchen, anzulegen und zu ändern, sowie WMS zur Anzeige.
Alle Dienste konfiguriert der Anwender über Oberflächen per Mausklick, die Konfiguration landet in einer PostgreSQL-Datenbank. Für spezielle GIS-Methoden greift Mapbender auf Postgis [16] zurück. Auch Administrationstätigkeiten erfolgen im Webinterface.
Fisch oder Bieger?
Die Vorteile von Mapfish sind derzeit vor allem unter der Haube zu finden, der Code ist klarer strukturiert als in Mapbender, die Komponenten sind besser isoliert und es gibt ein umfangreiches REST-API für unterschiedliche Sprachen, Entwickler fühlen sich hier schnell wohl. Die Mapbender-Codebasis ist ungleich komplexer und weist aufgrund ihres Alters einige gewachsene Strukturen auf, was aber in der für 2011 angekündigten Version 3 bereinigt sein soll.
Beim Zuschneiden von modernen User-Interfaces mit schicken Effekten unterscheidet sich die Leistungsfähigkeit der zwei Produkte nicht grundlegend. Die Ext- und Geo-Ext-Bibliotheken bieten die gleichen Aufklapp-Fenster, Zoomeffekte und andere Web-2.0-Gimmicks der Jquery-Bibliothek. Der Themeroller in Mapbender hilft die Layouts anzupassen, auch eigene Looks sind möglich.
Lizenzen
Mapfish unterliegt der GPL 3.1, einige Komponenten auch anderen Lizenzen. Vor allem die Bestimmungen bei der Ext-JS-Bibliothek, die es neuerdings nur mehr mit einer proprietären Lizenz gibt, sind etwas unklar. Mapbender dagegen ist unter einer dualen Lizenz veröffentlicht (BSD oder GPL 2.3). Das Copyright liegt bei der Osgeo [17], die sehr klare Vorschriften beim Ändern der Lizenz macht. Das Projekt gehört damit der Osgeo-Community. Open Layers unterliegt einer BSD-Lizenz, das Copyright liegt bei den Entwicklern. Allerdings ist auch hier eine Diskussion darüber im Gange, es an die Osgeo abzutreten.
Was darf’s sein?
Mapbender zeigt eher den Charakter einer Clientsoftware, während Mapfish ein umfangreiches Entwicklerwerkzeug darstellt. Beide Frameworks nutzen auf Wunsch Open Layers als Bibliothek, es kann aber auch als eigenständige Anwendung ohne integrierte Serverkomponente fungieren. Wer viele Dienste durch unterschiedlich berechtigte Nutzer in verteilten Architekturen verwalten, schützen und überwachen will, für den ist Mapbender die erste Wahl. Zwar gibt es auch in Mapfish einige Entwicklungen in dieser Richtung, sie sind aber noch in einem sehr prototypischen Zustand.
Mapfish ist dagegen die Plattform der Wahl für alle, die Open Layers mit allen Facetten nutzen wollen, einschließlich temporär gerenderter Objekte, zum Beispiel für die Druckvorstufe. Hier greift die Erweiterung Geo Ext, die als Widget alle Open-Layers-Objekte und -Methoden kapselt und bereitstellt – aber eher für Webdeveloper, weniger für den Endbenutzer. Als umfangreiche Entwickler-Suite ist heute Mapfish die komfortabelste Lösung.
Open Layers ist derzeit der De-facto-Standard für Webentwickler, die mit wenig Aufwand eine Karte in ihre Anwendung einbinden wollen. Für sie lohnt sich oft der Aufwand nicht, Mapbender oder Mapfish in Betrieb zu nehmen. Auch völlig GIS-fremde Projekte nutzen Open Layers als flotten Viewer komplexer Bilddaten, wie das Fraktal in Abbildung 1 zeigt. So abseitig ist das gar nicht: Die Webseiten der Projekte zeigen weit skurrilere Einsatzszenarien rund ums schnelle Darstellen großer Bilddateien.
Infos
- Mapbender: http://www.mapbender.org
- Open Layers: http://openlayers.org
- Mapfish: http://www.mapfish.org
- OGC WMS: http://www.opengeospatial.org/standards/wms
- Geo Web Cache: http://geowebcache.sourceforge.net
- Dietmar Fleischhauer, Frank Jäger, Markus Feilner, “Im Freien vermessen”: Linux-Magazin 10/10, S. 100
- Mapproxy: http://mapproxy.org
- Arnulf Christl, “Europäisch inspiriert”: Linux-Magazin 07/08, S. 76
- SQL Alchemy http://www.sqlalchemy.org
- Ext JS: http://www.sencha.com/products/js
- Geo EXT: http://geoext.blogspot.com
- Jquery: http://jquery.com
- Jquery UI Themeroller: http://jqueryui.com/themeroller
- Pylons: http://pylonshq.com
- Shapely: http://trac.gispython.org/lab/wiki/Shapely
- Georg Lösel, Markus Feilner, “Ein Elefant als Basis”: Linux-Magazin 09/07, S. 56
- Osgeo: http://www.osgeo.org






ich danke Ihnen für das Teilen http://uizentrum.de/en/