Der MapServer ist ein Werkzeug im Bereich der Geographischen Informationssysteme (GIS), mit dem sich georeferenzierte Daten durch das Internet darstellen lassen.Wie man mit ihm umgeht, wird in diesem Artikel beschrieben.
Die zentrale Funktion des MapServers [1] ist es, aus Geo-Daten eine Karte zuerzeugen und einen bestimmten Bereich als Bild (PNG-Grafik) zurVerfügung zu stellen. Dabei lassen sich sowohl Vektor- als auch Rasterdaten [2] nutzen. MapServer ist freie Software mit einer MIT-ähnlichenLizenz. Die grundlegenden Möglichkeiten des MapServers umfassen Navigation (Vergrößern/Verkleinern, Verschieben) und Abfragen anhand von Punkten, Regionen, Feldern oder Werten. Die Darstellung kann maßstabsabhängig verschieden erfolgen, Daten lassen sich mittels logischer oder regulärer Ausdrücke “klassifizieren” (MapServer-Terminologie). Zusätzlich zur Karte können Elemente wie Legenden, Maßstabsskalen oder Referenzkarten generiert werden.
Wie funktioniert der MapServer
Kern des MapServers ist ein CGI-basiertes Programm, welches einfache GIS-Methoden beherrscht. Die Entwicklung einer MapServer-Anwendung spielt sich in verschiedenen Dateien zur Definition von Eigenschaften, Darstellungen und Vorlagen für dieBenutzerschnittstelle ab. Da das alles etwas trocken ist, gehen wir den MapServer mit einem Beispiel an. Das zugehörige Paket liegt unter [3] bereit und stammt vom FreeGIS-Projekt [4]. Nach dem Entpacken mit rpm -ivh mapserver-3.3.010-demo.rpm befinden sich die installierten Dateien unter /opt/mapserver. Mit
cd /opt/mapserver ./mapserverdemo start Starting MapServer Demo ... Open http://127.0.0.1:4242 in your WebBrowser to start.
wird ein mitinstallierter mini_httpd und damit die MapServer-Demo gestartet.Mit ./mapserverdemo stop kann sie wieder beendet werden. Öffnen Sie die angegebene URL (in unseremBeispiel ist dies http://127.0.0.1:4242) und klicken Sie sich durch. Abbildung 1 zeigt die Startansicht mit den angesprochenen Elementen. VielSpaß beim Navigieren. Wir sehen uns gleich wieder :-)
MapServer-Demo und Datenebenen |
|
Die Beispiel-Anwendung demonstriert einige Funktionalitäten des MapServers.Wählen Sie weitere Datenebenen (Layer) aus und aktualisieren Sie dieDarstellung. Navigieren Sie auf der Karte. Wechseln Sie in einen Abfrage-Modus und versuchen Sie Informationen über die dargestellte Objekte zu bekommen.Achtung: Vergewissern Sie sich, das für die nächste Aktion der richtige Modus(Browse/Query) gewählt ist! Bei GIS können Datenebenen (Layer), wie Höhenlinien, Straßen, Siedlungsflächen, etc. übereinandergelegt werden. Die Aufteilung der Informationen auf Layer ist dabei sehr flexibel. Es ist auch eine Einteilung in Autobahnnetz, Bundesstraßen, usw. möglich. |
Hier sind wir wieder. Wie Sie gesehen haben, benötigt eine MapServer-Anwendung zunächst dieInitialisierung einiger CGI-Variablen. Danach stellt sich die Benutzeroberfläche mit diversen Bedienelementen dar. Über die CGI-Schnittstelle können schließlich mehrere Anfragen gleichzeitig “gleichzeitig” bedient werden. Einstellungen werden beim Klienten gehalten, der pro Anfrage einen Prozess im Server anstößt. Die erzeugten Bilder werden auf dem Server abgelegt (in der Demo in /tmp), hier sollte also regelmäßig, etwa mittels cron, aufgeräumt werden.
Das Grundgerüst
Neben den Daten besteht das Grundgerüst einer MapServer-Anwendung aus dreiDateien:
- eine Initialisierung, die als Einstiegsseite nach Belieben ausgeschmückt werden kann,
- einer Vorlage, mit der die Benutzerschnittstelle beschrieben wird und
- einer MAP-Datei, die die Darstellung der Karte bestimmt.
Im Verzeichnis /mini_demo unter der bisherigen URL finden Sie eine Minimalanwendung der MapServers. Diese recht spartanische Karte(dargestellt sind die Hauptstraßen aus der großen Demo) soll nun um diezugehörigen Seen erweitert werden. Die Initialisierung der Anwendung (demo_init.html) beschränkt sich dabei auf die Angabe der Pfade zum CGI-Binary und zur MAP-Datei und kann unbearbeitet bleiben.
Die zentrale Datei ist nun die MAP-Datei (demo.map). Die Anwendung wird hier — in MapServer-Terminologie — über die Definition von Objekten und derenEigenschaften konfiguriert. Basis ist dabei das MAP-Objekt, dessen Definition am Dateianfang beginnt und am Ende mit END abgeschlossen wird. Neben Skala und Legende sind hier zwei Layer definiert. Die Anordnung im Mapfile ist wichtig: Layer werden der Reihenfolge nach von oben nach unten gezeichnet, bei Abfragen werden die Layer entgegengesetzt durchsucht. Die Seen werden als letzter Layer eingefügt:
LAYER NAME seen END
Damit ist das neue Layer-Objekt seen erzeugt, aber noch ist nichts zu sehen.
LAYER
NAME seen
DATA lakes
TYPE POLYGON
CLASS
NAME "Water & Rivers"
COLOR 49 117 185
END
END
Das ist der Minimalsatz zur Definition eines Layers: NAME bezeichnet den Namen des Layers, mit dem es aus der Anwendung referenziert wird.DATA gibt den Namen des zugehörigen Datensatzes an. Da es sich bei dem Seen-Layer um einen Vektordatensatz im Shapefileformat handelt, ist nur der Shapefile-Name ohne Dateiendung (hier lakes) anzugeben.
Shapefile |
| Im Shapefile-Format werden Vektordaten in drei Dateien (Geometrie, Indices,und Attribute) gespeichert. Das proprietäre Format des Environmental SystemsResearch Institute (ESRI) ist im GIS-Bereich weit verbreitet, da es dokumentiert [5] und recht kompakt ist. Die Handlichkeit des Formats wird allerdings durch einige Einschränkungen der gespeicherten Informationen (z.B. keine Topologie) erreicht, die beim einfachen Mapping jedoch keine Rolle spielen. |
Der Shapefile-Typ (TYPE) muss explizit angegeben werden. Shapefiles können dabei POINT-, LINE– und POLYGON-Daten enthalten, Vorgabewert für den MapServer sind Linien. Die Elemente eines Layers müssen für die Darstellung in Klassen (mit bestimmten Eigenschaften wie Farbe, Strichstärke, …) eingeteilt werden. Daher muss mindestens ein CLASS-Key gesetzt werden, bei mehreren Klassen wird die Zugehörigkeit anhand von Attributen über logische oder reguläre Ausdrücke kontrolliert. Die Angabe eines Namens ist notwendig, wenn die Klasse auch in der Legende dargestellt werden soll. Damit sind die Änderungen an der MAP-Datei abgeschlossen. Bleibt noch die Benutzerschnittstelle so zu erweitern, dass der neue Layer auch ausgewählt werden kann. Dazu wird in der Vorlage demo.html die select-Form um einen Eintrag erweitert:
<option value="seen" [seen_select]> Lakes
Hier findet sich der Name aus der MAP-Datei wieder, der nachfolgende Tag wirdvom MapServer-CGI ersetzt. Mit dieser Erweiterung lassen sich nun auch Seen auf der Karte anzeigen.
Einige Stolpersteine
Die Entwicklung des MapServers wird vorrangig an der Universität von Minnesotavorangetrieben, Minor-Releases erscheinen dabei oft wöchentlich. Allerdingsist nicht alles sofort dokumentiert (siehe den Kasten “MapServer undokumentiert “) und gerade für Pfade gibt es einiges zu beachten. Wenn Sie für weitere Experimente auf einer Kopie der Minidemo weiterarbeiten wollen, sind die Pfade an mehreren Stellen zu ändern:
- in demo_init.html der absolute Pfad zur MAP-Datei.
- in der MAP-Datei ist der Pfad zum Datenverzeichnis (SHAPEPATH) im Map-Objekt absolut, die Pfade zu den weiteren Vorlagen relativ zur Wurzel der Anwendung.
Eine weitere Fehlerquelle stellen die Maßstabsgrenzen für die Darstellung imWeb-Objekt (max-/minscale) dar: Wollen Sie die Anwendung etwa an eine800x600-Auflösung anpassen und dafür die Bildgröße ändern, so ändert sich ohneweitere Einstellungen auch der Anfangsmaßstab der Darstellung. Liegt diese nunausserhalb der bestimmten Grenzen, ist nichts zu sehen.
Abfragen
Zurück zum Beispiel: Natürlich will der Anwender auch weitere Informationenüber die gezeigten Geo-Objekte. Dazu wird das Layer-Objekt Seen um ein QUERY-Objekt erweitert:
QUERY TEMPLATE lakes.html END
Im Template kann mit Tags, die vom MapServer ersetzt werden, aufdie einzelnen Felder der Attribut-Tabelle durchgegriffen werden.
Weitere Elemente auf der Benutzeroberfläche
Nach einigen Arbeiten am MAP-File sollte auch die Benutzeroberflächeerweitert werden, schliesslich können inzwischen mehrere Datenebenen angezeigtwerden. Deshalb kann der Darstellung noch eine Legende hinzugefügt werden, die in der Beispiel MAP-Datei bereits konfiguriert ist. Für diese Ergänzung reicht einweiterer Tag <<mg src=”[legend]”> im Template demo.html aus,den Sie an geeigneter Stelle einsetzen können. Gleiches funktioniert auch fürdie scalebar (Maßstabsskala).
MapServer undokumentiert |
| Zwei wichtige Eigenschaften des Web-Objekts sind bisher nicht dokumentiert,aber für die Benutzerbarkeit einer MapServer-Anwendung wichtig: EMPTY undERROR. Beide haben als Parameter eine URL. EMPTY wird in der Demo benutzt und definiert die Standard-Antwort, wenn bei einer Abfrage kein Geo-Objekt gefunden wurde. ERROR ist die entsprechende Standard-Antwort, wenn Fehler auftreten. |
Ausblick
Mit diesem Abriss sind die grundlegenden Elemente des MapServers beschrieben.Die einzelnen Optionen der Objekte sind in der Dokumentation erklärt. Dasvorgestellte Konzept läßt sich soweit erweitern, dass einzelne Optionen derObjekte über Tags modifiziert werden können. Über Java(Script) können nochweitere Funktionalitäten ([6], [7]) der Benutzeroberfläche implementiert werden.
Neben dem beschriebenen Ansatz gibt es aber noch einen ganz anderen Zugang zur Funktionalität des MapServers: MapScript. Mittels SWIG [8] wurde eine API für Perl (prinzipiell auch für Python, Tcl/Tk und andere Skripting-Sprachen) realisiert. Inzwischen ist auch eine PHP-Schnittstelle verfügbar. Mit der gewonnenen serverseitigen Flexibilität lassen sich auch komplexere Anwendungen entwickeln.
Woher Daten für eigene Anwendungen?
Wie Bernhard Reiter in [2] bereits erläuterte, ist die Verfügbarkeit von Datenhäufig ein Problem bei GIS-Anwendungen. Natürlich gibt es viele Datensätze, die gekauft oder für hohe Summen lizenziert werden können. Der MapServerunterstützt auch die Verwendung solcher Daten, da nie die Daten selbst,sondern immer nur eine Abbildung als Grafik weitergegeben wird. Diese Situation ist jedoch für freie Projekte unbefriedigend. Deshalb hat essich das FreeGIS-Projekt zur Aufgabe gemacht, neben Werkzeugen zur Geo-Datenverarbeitung auch Links zu freien Daten zu sammeln.
Infos |
| [1] MapServer-Heimatseite: http://mapserver.gis.umn.edu/ [2] Bernhard Reiter: Hello World! – GIS unter GNU/Linux, Linux-Magazin 2000/07, S. 89 [3] MapServer-Demo: ftp://ftp.linux-magazin.de/pub/GIS/mapserver-3.3.010-demo.rpm [4] FreeGIS-Projekt: http://freegis.org [5] ESRI Shapefile Whitepaper: http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf [6] MapServer Gallerie: http://mapserver.gis.mnu.edu/gallery_long.html [7] Data Deli: http://deli.dnr.state.mn.us [8] SWIG-Projekt: http://www.swig.org [9] FreeGIS-Artikel: https://www.linux-community.de/Software/GIS/ |
Der Autor |
| Frank Koormann arbeitet als Systemwissenschaftler seit 1996 mit GIS.Mit zwei Freunden gründete er 1999 die Intevation GmbH, die unter anderem das FreeGIS-Projekt betreut und so die Idee Freier Software auch in speziellere Anwendungsbereiche trägt. |
Copyright © 2000 Linux New Media AG






Der Artikel gefällt mir irgendwie gut, diese Art Mapserver dürfte recht interessant sein (auch zB für Hobbyarcheologen etc.), aber irgendwie habe ich nicht so ganz verstanden wie das ganze jetzt funktioniert. Müssen die Maps selbst erstellt werden (anhand dieser Scriptsprache), gibt es bereits schon irgendwelche freien Maps?
Ich würde mir das “Gerät” gerne mal ansehen, sieht mir allerdings sehr Speicherhungrig aus – vielleicht ein kleines interaktives Demo hier auf der Seite?
1. Danke :) 2. Grundlage für die Karten sind Geo-Datensätze, hier Vektordaten im Shapefile-Format. Je nach Umfang und Detaillierungsgrad können diese Daten in der Tat sehr umfangreich werden. Das angegebene RPM-Paket ist allerdings “nur” 2 MB gross, entpackt 5,6 MB. Der Link stimmt nicht, auf dem Linux-Magazin Server befindet sich “mapserver-3.3.011-1.i586.rpm”! Aufgrund der potenziellen Größe der Geodatensätze liefert der MapServer nur dynamisch generierte Bilder der Karten durchs Internet, eignet sich daher für Anwendungen bei denen viele Anwender nur wenig mit den Daten/Karten agieren, d.h. nur ein paar Grafiken pro Anwender verschickt werden. Es gibt auch Werkzeuge für den anderen Ansatz,… Mehr »
Sorry, arbeite gerade an einer neuen Version der FreeGIS-CD (die hoffentlich eine höhere Qualität hat als das letzte Posting :(
Die URL ist nochmal falsch,
Frank
[1] ftp://ftp.linux-magazin.de/pub/GIS/mapserver-3.3.011-1.i586.rpm
das ist genau das was ich für uns gesucht habe. Wir arbeiten zur zeit mit einem Prop. System unter Windows und brauchen dringend weitere 3 Lizenzen doch leider ist dafür kein budget da. Daher ist das genau die alternative wonach ich schon suchte. Danke
Hallo. Der Artikel ist wirklich klasse und ich bin begeistert von der großen Funktionalität. Nur würde ich gerne ein Beispiel erst mal bei mir privat auf den Rechner zum laufen bringen und dann erst der Verwaltung als alternative vorschlagen. Leider klappen bei mir keine Links im Artikel und in den Antworten und bei UMN habe ich ein Paket runter geladen womit ich vorerst nichts anfangen kann. Daten ala: mapparser.c , maprasterquery.c , configure.in ,sortshp.c Naja ich habe von php und mySQL ein wenig Ahnung. Habe schon diverse Forensoftwaren und CMS durchgekaut, aber sowas kam mir noch nicht unter. Kann mir… Mehr »
Die Download-Links funktionieren in der Tat nicht mehr :( Allerdings sind die benannten Pakete auch nicht mehr aktuell …
Das FreeGIS CD Archiv bietet noch ein RPM, allerdings auch nur in der veralteten Version 3.6.5:
http://ftp.gwdg.de/pub/misc/freegis/intevation/freegis/gnu-linux-i586/freegis-1.2.4/i386/mapserver-3.6.5-1.i386.rpm > Daten ala: mapparser.c , maprasterquery.c , configure.in ,sortshp.c Naja, halt die Sourcen zum MapServer.
http://mapserver.gis.umn.edu/doc40/unix-install-howto.html bietet eine Anleitung zum selbst kompilieren > btw: Ich benutze WinXP und den XAMPP. Äh. Dann empfehle ich die unter http://mapserver.gis.umn.edu/dload.html angebotenen Win32-Binary Pakete (zusammen mit den dortigen Demo-Daten) Beste Grüße, Frank