|
Home | Docs | Issue Tracker | FAQ | Download |
|
|
| Revision: | $Revision: 8478 $ |
|---|---|
| Date: | $Date: 2009-01-29 20:54:42 +0100 (Do, 29. Jan 2009) $ |
| Author: | Jeff McKenna |
| Contact: | jmckenna at gatewaygeomatics.com |
| Author: | David Fawcett |
| Contact: | david.fawcett at moea.state.mn.us |
| Author: | Howard Butler |
| Contact: | hobu.inc at gmail.com |
Contents
MapServer ist ein weit verbreitetes Open Source Projekt, dessen Hauptanwendung darin besteht dynamische Karten über das Internet anzuzeigen. Einige wesentliche Merkmale sind:
Grundlegend betrachtet ist MapServer ein CGI programm, das inaktiv in einem Webserver eingebunden ist. Wird eine Anfrage an MapServer geschickt, werden Parameter der Anfrage-URL und Einstellungen des Mapfile benutzt um ein Bild zu erstellen. Es können auch Bilder für Legenden, Maßstabsleisten, Übersichtskarten und Werte aus CGI Variablen abgefragt werden.
Siehe auch
Das Glossary enthält viele der in diesem Dokument benutzten Fachausdrücke.
MapServer kann durch MapScript oder templating erweitert und angepasst werden. Er kann mit unterstützung für viele verschiedene vector und raster Formate übersetzt werden. Außerdem wird eine Vielzahl von output Formaten unterstützt. Viele vorkompilierte MapServer-Distributionen enthalten fast alle unterstützten Funktionen.
Siehe auch
Bemerkung
MapScript stellt ein Scripting-interface für MapServer zur Verfügung mit dem Web- und Stand-alone-Anwendungen realisiert werden können. MapScript kann unabhängig vom CGI MapServer benutzt werden. Es kann als Modul für verschiedene Skriptsprachen geladen werden. MapScript unterstützt derzeit ref:PHP <php>, Perl, Python, Ruby, Tcl, Java, und .NET.
Diese Anleitung dient nicht der detailierten Besprechung von MapScript. Für weiterführende Informationen siehe MapScript Reference.
Die Basisarchitektur einer MapServer-Anwendung
Eine einfache MapServer-Anwendung besteht aus:
Mapfile - Konfigurationsdatei mit strukturiertem Text für die MapServer- Anwendung. Hier wird das Gebiet der Karte definiert, MapServer die Datenquellen bekannt gegeben und wo bzw. wie die Ergebnisse ausgegeben werden. Auch die einzelnen Layer werden hier definiert mit Angaben zur Datenquelle, Projektion und Ausprägung. Die Dateiendung muss .map sein, sonst erkennt MapServer die Datei nicht.
Siehe auch
Geodaten - MapServer kann auf verschiedene Quellen von Geodaten zugreifen. Das Standardformat ist die ESRI Shapedatei. Viele andere Datenformate können benutzt werden. Dies ist beschrieben in `Adding data to your site`_.
Siehe auch
HTML-Seiten - die Schnittstelle zwischen Benutzer und MapServer. Sie liegen normalerweise im Web-Root. In der einfachsten Anwendung kann MapServer ein statisches Kartenbild in eine HTML-Seite einfügen. Um die Karte interaktiv zu machen, kann das Bild in ein HTML-Formular gesetzt werden.
CGI Programme sind ‘zustandslos’. Jede Anfrage ist neu und es kann nicht auf Daten vorheriger Anfragen zurück gegriffen werden. Deshalb müssen mit jeder Anfrage an MapServer auch Kontextinformationen gesendet werden. Welche Layer sind an, welcher Ausschnitt soll gezeigt werden, Anwendungsmodus, etc. sind solche Informationen. Sie werden entweder in versteckten HTML-Formularen oder als URL-Variable übergeben.
Eine einfache MapServer CGI-Anwendung könnte zwei HTML-Seiten enthalten:
Initialisierungsdatei - benutzt ein HTML-Formular mit versteckten Variablen um die initiale Anfrage an MapServer zu schicken. Dieses Formular könnte auf eine eigene Seite gesetzt werden oder die initialen Informationen können als Variable in einer URL übergeben werden.
Templatedatei - steuert, wie die Karten- und Legendenausgaben von MapServer im Browser erscheinen. Werden MapServer CGI-Variablen benutzt, wird MapServer diese durch die entsprechenden Werte zur Laufzeit ersetzen, während die HTML-Seite zur Anzeige im Browser erstellt wird. Typische Werte sind z.B. der Kartenbildname, Name des Übersichtsbildes, die Kartenausdehnung. Durch das Template wird auch festgelegt, wie mit der MapServer-Anwendung interagiert werden kann.
Siehe auch
MapServer CGI - ist die Binärdatei bzw. ausführbare Datei, die alle Anfragen erhält und Bilder, Daten, usw. ausliefert. Sie wird in das cgi-bin- oder Skript-Verzeichnis des HTTP-Servers installiert. Der Webserver-Benutzer sollte Ausführungsrechte für dieses Verzeichnis haben. Aus Sicherheitsgründen sollte das Verzeichnis nicht das Dokument-Root-Verzeichnis sein. Die Datei heißt standardmäßig mapserv
HTTP-Server - liefert HTML-Seiten aus, die der Browser des Benutzers anfordert. Es wird ein einsatzbereiter HTTP- bzw. Web-Server benötigt, wie z.B. Apache oder Microsoft Internet Information Server, der auf der selben Maschine wie der MapServer läuft.
OSGeo4W ist ein neuer Windows-Installer der zum Installieren oder Aktualisieren von MapServer, Zusatzanwendungen und anderer Open Source GIS-Software benutzt werden kann. Die folgenden Schritte beschreiben, wie OSGeo4W benutzt wird:
Download OSGeo4W http://download.osgeo.org/osgeo4w/osgeo4w-setup.exe
Ausführen (Doppelklick) der .exe
Auswahl von “Advanced”
Bemerkung
Express bietet Optionen für Komplettpakete wie MapServer, GRASS und uDig. Advanced hingegen ermöglicht die Auswahl von Werkzeugen für die Kommandozeile, die in der Variante express nicht enthalten sind.
Auswahl der zu installierenden Pakete
Bemerkung
Ein Klick auf “Default” neben den Komplettpaketen (wie z.B. Web) installiert alle Unterpakete von Web. Ein Klick auf “skip” neben einem Paket (wie z.B. MapServer) wählt das Paket und alle seine Abhängigkeiten zur Installation aus.
Der Installer lädt alle Pakete herunter.
Um Apache als Dienst einzurichten, muss die Datei apache-install.bat ausgeführt werden.
Bemerkung
Dieses Skript sollte in der “OSGeo4W Shell” gestartet werden. Auf dem Desktop befindet sich dafür eine Verknüpfung.
Bemerkung
Mit dem Skript apache-uninstall.bat kann der Dienst wieder entfernt werden.
Starten des Apache von der OSGeo4W-Shell und Aufruf von http://127.0.0.1
apache-restart.bat
Überprüfen ob MapServer richtig installiert wurde
MapServer läuft unter Linux, Windows, Mac OS X, Solaris und weiteren Betriebssystemen. Zum Übersetzen oder Installieren von benötigten Programmen, werden wahrscheinlich administrative Rechte benötigt. Fragen nach den Minimalanforderungen der Hardware können nicht pauschal beantwortet werden, da diese stark anwendungsabhängig sind. Für Entwicklungs- und Lernzwecke wird eine sehr einfache Maschine ausreichen. Für den produktiven Einsatz wird eine Optimization des gesamten Spektrums von den Daten bis zur Serverkonfiguration empfohlen.
Es wird ein einsatzbereiter und korrekt konfigurierter HTTP/Web-Server, wie z.B. Apache oder Microsoft Internet Information Server benötigt. OSGeo4W enthält bereits Apache, aber die Konfiguration kann auch an den IIS angepasst werden. Alternativ kann MS4W benutzt werden, um MapServer unter Windows zu installieren.
Für Windows kann das Paket MS4W benutzt werden um eine komplette Umgebung, mit vorkonfiguriertem HTTP-Server, MapServer und anderen Tools zu installieren. Der FGS Linux Installer bietet für diverse Linux-Distributionen die gleiche Funktionalität.
Die vorliegende Einleitung geht von der Verwendung vorkompilierter OSGeo4W-Windows-Binaries aus. Für Linux oder Mac OS X sollte dies analog funktionieren. Unter Download gibt es Installationsanleitungen für vorkompilierte Pakete für Mac OS X und Linux.
Benötigt wird außerdem ein Webbrowser und ein Texteditor (vi, emacs, notepad, homesite) zum Bearbeiten des HTML-Codes und des Mapfile.
Neben dem Erlernen, wie die verschiedenen Komponenten einer MapServer-Anwendung zusammen arbeiten und der Mapfile-Syntax ist ein gewisser Grad konzeptuellen Verständnisses und Kenntnisse in einigen anderen Bereichen erforderlich.
Es sollten mindestens Kenntnisse zum Bearbeiten von HTML-Seiten und der Funktionsweise von HTML-Formularen vorhanden sein. Der Haupteinsatzzweck einer MapServer-Anwendung stellt das Erzeugen von Karten dar. Deswegen sollten die Grundlagen von Geodaten und auch Kartenprojektionen nicht unbekannt sein. Für komplexere Anwendungen werden Kenntnisse von SQL, DHTML/Javascript, Java, Datenbanken, Ausdrücke, Kompilierung und Skriptsprachen sehr nützlich.
Durch das Mapfile werden die Datenquellen und das Styling für den MapServer konfiguriert. Die Datei ist eine ASCII-Textdatei und kann verschiedene Objekte enthalten. Jedes Objekt hat eine Vielzahl von Parametern. Alle .map-Datei (bzw. Mapfile) -Parameter sind in der Mapfile Referenz dokumentiert. Ein einfaches Beispiel eines Mapfile zur Darstellung eines Layers und das dazugehörige Kartenbild wird im Folgenden gezeigt:
NAME "sample"
STATUS ON
SIZE 600 400
SYMBOLSET "../etc/symbols.txt"
EXTENT -180 -90 180 90
UNITS DD
SHAPEPATH "../data"
IMAGECOLOR 255 255 255
FONTSET "../etc/fonts.txt"
#
# Start of web interface definition
#
WEB
IMAGEPATH "/ms4w/tmp/ms_tmp/"
IMAGEURL "/ms_tmp/"
END
#
# Start of layer definitions
#
LAYER
NAME 'global-raster
TYPE RASTER
STATUS DEFAULT
DATA bluemarble.gif
END
Rendered Bluemarble Image
Bemerkung
MAP
NAME "sample"
EXTENT -180 -90 180 90 # Geographic
SIZE 800 400
IMAGECOLOR 128 128 255
END
LAYER
NAME bathymetry
TYPE RASTER
STATUS DEFAULT
DATA bath_mapserver.tif
END
Siehe auch
Vektorlayer vom TYPE point (Punkt), line (Linie) oder polygon (Polygon) können dargestellt werden. Das folgende Beispiel zeigt wie nur die Linien eis Polygon-Layer dargestellt werden, in dem der Parameter OUTLINECOLOR benutzt wird:
LAYER
NAME "world_poly"
DATA 'shapefile/countries_area.shp'
STATUS ON
TYPE POLYGON
CLASS
NAME 'The World'
STYLE
OUTLINECOLOR 0 0 0
END
END
END # layer
Siehe auch
Rendered Bluemarble image with vector boundaries
CLASS
NAME "Primary Roads"
STYLE
SYMBOL "circle"
COLOR 178 114 1
SIZE 15
END #style1
STYLE
SYMBOL "circle"
COLOR 254 161 0
SIZE 7
END #style2
END
Rendered Bluemarble image with styled roads
MAP
NAME "sample"
EXTENT -180 -90 180 90 # Geographic
SIZE 800 400
IMAGECOLOR 128 128 255
SYMBOLSET "../etc/symbols.txt"
END
wobei symbols.txt folgendes enthalten könnte:
SYMBOL
NAME "ski"
TYPE PIXMAP
IMAGE "ski.gif"
END
das Mapfile würde enthalten:
LAYER
...
CLASS
NAME "Ski Area"
STYLE
SYMBOL "ski"
END
END
END # layer
Rendered Bluemarble image with skier symbol
Siehe auch
Konstruktion von kartographischen Signaturen, Signaturbeispiele und SYMBOL
Ein Beispiel für LABEL-Objekt das eine Schrift referenziert:
LABEL
FONT "sans-bold"
TYPE truetype
SIZE 10
POSITION LC
PARTIALS FALSE
COLOR 100 100 100
OUTLINECOLOR 242 236 230
END # label
Rendered Bluemarble image with skier symbol and a label
MapServer unterstützt drei Arten von CLASS-Expressions in einem LAYER:
Zeichenkettenvergleiche
(EXPRESSION "africa")
Reguläre Ausdrücke
(EXPRESSION /^9|^10/)
Logische Ausdrücke
([POPULATION] > 50000 AND '[LANGUAGE]' eq 'FRENCH')
Bemerkung
Logische Ausdrücke sollten wenn möglich vermieden werden. Sie verlangsamen die Geschwindigkeit beim Erstellen des Kartenbildes.
Siehe auch
Ab MapServer 4.10 kann jeder Teil eines Mapfile in eine externe Datei ausgelagert werden und per INCLUDE-Parameter wieder inkludiert werden. Die einzubindende Datei kann eine beliebige Dateiendung haben und die Angabe erfolgt immer relativ zum Mapfile. Einige mögliche Anwendungen:
Das folgende Beispiel demonstriert die Verwendung von includes um eine Layerdefinition aus einer externen Datei einzubinden:
‘shadedrelief.lay’ enthält:
LAYER
NAME 'shadedrelief'
STATUS ON
TYPE RASTER
DATA 'GLOBALeb3colshade.jpg'
END
das zugehörige Mapfile enthält:
MAP
...
INCLUDE "shadedrelief.lay"
...
END
Das folgende ist ein Beispiel bei dem alle LAYER in externen Dateien (Endung .lay) und alle anderen Objekte (WEB, REFERENCE, SCALE, etc.) in einer ”.ref”-Datei gespeichert sind:
NAME "base"
#
# include reference objects
#
INCLUDE "../templates/template.ref"
#
# Start of layer definitions
#
INCLUDE "../layers/usa/usa_outline.lay"
INCLUDE "../layers/canada/base/1m/provinces.lay"
INCLUDE "../layers/canada/base/1m/roads_atlas_of_canada_1m.lay"
INCLUDE "../layers/canada/base/1m/roads_atlas_of_canada_1m_shields.lay"
INCLUDE "../layers/canada/base/1m/populated_places.lay"
END # Map File
Siehe auch
MapServer version 5.2 OUTPUT=GIF OUTPUT=PNG
OUTPUT=JPEG OUTPUT=WBMP SUPPORTS=PROJ SUPPORTS=FREETYPE
SUPPORTS=WMS_SERVER INPUT=SHAPEFILE
Zum Testen kann ein HTTP-Request zum MapServer CGI-Programm gesendet werden, ohne jegliche Variablen (z.B. http://your.domain.name/cgi-bin/ms4/mapserv.exe) Wird die Meldung ‘No query information to decode. QUERY_STRING not set.’ ausgegeben, funktioniert die MapServer-Installation.
Laden Sie die MapServer Demo herunter, entpacken diese und folgen Sie den Anweisungen in der ReadMe.txt. Die Demodateien müssen an die richtige Stelle auf dem Server kopiert werden und das Mapfile und die HTML-Seiten müssen den Pfaden der vorliegenden Umgebung angepasst werden. Anschließend wird per Browser die Datei init.html geladen und der Knopf ‘initialize button’ gedrückt. Sollten Fehler auftreten, müssen die gemachten Änderungen anhand der Anleitung überprüft werden.
Jetzt, da die MapServer-Demo läuft, kann sie so verändert werden, dass eigene Daten angezeigt werden. Neue LAYER können dem Mapfile hinzugefügt werden, die auf eigene Geodaten aufbauen. (Die vorhandenen Layer sollten gelöscht oder deaktiviert werden z.B. durch Setzen des Status auf “off”.)
Wenn die eigenen Daten eine andere geografische Ausdehnung als die Demodaten haben, muss MAP EXTENT angepasst werden. Um die Ausdehnung zu bestimmen kann ogrinfo benutzt werden. Es kann auch ein GIS benutzt werden um die Ausdehung zu bestimmen. Der MAP EXTENT muss in den Einheiten der Ausgabeprojektion angegeben werden.
Werden Geodaten mit unterschiedlichen Projektionen hinzugefügt, muss eine PROJECTION Definition für MAP (Ausgabeprojektion) und LAYER (vorhandene Layerprojektion) hinzugefügt werden. Adding Data to Your Site ...............................................................................
MapServer unterstützt “von Haus aus” einige Formate für Geodaten. Viele mehr werden verfügbar, wenn MapServer mit den Open Source Bibliotheken GDAL und OGR übersetzt wird.
Vektordaten können Punkt-, Linien- und Flächenobjekte beinhalten. MapServer unterstützt standardmäßig ESRI Shapefiles, kann aber kompiliert werden mit unterstützung für folgende Formate: PostgreSQL-PostGIS, Geography Markup Language (GML), MapInfo, Komma-,Tab-getrennte Textdateien, und weitere Formate mit OGR.
In der Vector Data reference sind Beispiele zu finden, wie Geodaten zur eigenen MapServer-Anwendung hinzugefügt werden können.
Rasterdaten sind pixelbasierte oder Netz/Grid-Daten. Standardmäßig unterstützt MapServer Tiff/GeoTiff, and EPPL7. Mit GDAL, werden GRASS, Jpeg2000, ArcInfo Grids, und weitere Formate unterstützt. Wenn MapServer mit GDAL-Unterstützung übersetzt wird, sollte die eingebaute TIFF-Unterstützung nicht aktiviert werden. Sonst kann es zu Konflikten kommen. Weitere Informationen sind in der Rasterdaten-Referenz nachzulesen.
Da die Erde rund und der Monitor (oder Papierkarte) flach ist, kommt es zu Verzerrungen wenn räumliche Geodaten in einem zweidimensionalen Bild dargestellt werden sollen. Projektionen ermöglichen die Darstellung auf einer ebenen Fläche. Dabei werden einige der Eigenschaften (z.B. Fläche, Richtung, Entfernung, Maßstab oder Konformität) der Daten verzerrt. Die verschiedenen Projektionen unterscheiden sich in der originalgetreuen Darstellung der unterschiedlichen Eigenschaften. Eine gute Einführung stellt die universität von Colorado zur Verfügung.
Liegen alle Daten in der selben Projektion vor (oder unprojiziert Latitude/Rechtswert und Longitude/Hochwert), muss keine Projektion angegeben werden im Mapfile. Für die ersten Schritte mit MapServer kann dies die Konfiguration vereinfachen.
Unterstützung für On-the-fly Projektion bietet Proj.4, sofern MapServer entsprechend kompiliert wurde. Anleitungen für Proj.4-Unterstützung unter Windows können im Wiki gefunden werden.
Es gibt zwei Wege raumbasierte Daten abzufragen. Beide Methoden liefern Daten, in dem entweder Template- oder CGI-Variablen ersetzt werden. Eine QUERYMAP kann die Ergebnisse der Abfrage visualisieren.
Um Abfragen zu ermöglichen, muss jeder LAYER ein TEMPLATE definieren. Alternativ kann auch in einer CLASS ein Template definiert werden. Weitere Informationen, welche CGI-Variablen zum Erstellen von Abfragen benutzt werden können, sind in der MapServer CGI Referenz zu finden.
Ein Benutzer kann zu einem Feature Attributdaten abfragen. ‘Zeige mir alle Seen deren Tiefe mehr als 30 Meter beträgt’, wobei ‘Tiefe’ ein Feld in der .dbf Datei oder der Datenbank ist. Bei Attributabfragen werden die Abfrageinformationen per URL (oder Formularübergabe) übergeben. Mode=itemquery liefert einen Wert, mode=itemnquery liefert mehrere Werte.
Die Abfrage sollte den Parameter QLAYER enthalten, der den abzufragenden Layer angibt und einen QSTRING der die Abfrage enthält.Optional kann QITEM zusammen mit QSTRING angegeben werden, um das Abfragefeld direkt anzugeben. Attributabfragen sind räumlich auf die im Mapfile definierte Ausdehnung (EXTENT) begrenzt.
Der Benutzer wählt Features durch einen Klick auf die Karte oder das Aufziehen eines Abfragerechtecks. Die Abfrage wird wieder per URL oder Formularübergabe gestellt. Durch das Setzen von mode=QUERY wird bei einem Klick auf die Karte das nächstgelegene Feature geliefert. Bei mode=NQUERY werden alle Feature eines Klicks oder Abfragerechtecks geliefert. Weitere Optionen sind unter CGI zu finden.
See: OpenLayers http://openlayers.org
Die Aufbereitung von Daten für eine performante MapServer-Anwendung ist genauso wichtig wie die Hardwareausstattung und -konfiguration. MapServer arbeitet bereits sehr effizient. Jede Reduzierung des Verarbeitungsaufwandes, der für die Abarbeitung eines Requests notwendig ist, kann die Gesamtperformance deutlich erhöhen. Hier sind einige Anregungen:
Siehe auch
Fragen können an die Liste MapServer Users gestellt werden, wenn man sich vorher registriert. Die Fragen werden normalerweise schnell beantwortet und oftmals auch direkt von den Entwicklern. Einige Punkte sollten beachtet werden:
Benutzer und Entwickler von MapServer können im Internet Relay Chat angetroffen werden. Der Chatkanal ist #mapserver auf irc.freenode.net
Perry Nacionales hat ein großartiges Tutorial erstellt, wie eine MapServer-Anwendung erstellt wird. Jeder ist eingeladen die Sammlung von Beispielen zu erweitern falls bestimmte Anwendungsscenarien fehlen.
Die MapServer Testsuite kann heruntergeladen werden zur Demonstration der MapServer-Funktionalitäten.
Web Mapping Illustrated , a new book by Tyler Mitchell that describes well and provides real-world examples for the use of Web mapping concepts, Open Source GIS software, MapServer, Web services, and PostGIS.
Mapping Hacks , by Schuyler Erle, Rich Gibson, and Jo Walsh, creatively demonstrates digital mapping tools and concepts. MapServer only appears in a handful of the 100 hacks, but many more are useful for concepts and inspiration.
Beginning MapServer: Opensource GIS Development , by Bill Kropla, is a new book focusing on MapServer. So new, I haven’t seen it yet. According to the publisher, it covers installation and configuration, basic MapServer topics and features, incorporation of dynamic data, advanced topics, MapScript, and the creation of an actual application.