Project logo OSGeo Project

MapServer Quickstart

MapServer ist eine Open Source serverbasierte Anwendung, mit der geografische Kartenbilder und Vektordaten im Internet mittels OGC Standards wie etwa WMS , WFS und WCS veröffentlicht werden können.

Dieser Quickstart beschreibt:

MapServer mit einem “mapfile” konfigurieren

Note

Was werden wir lernen ? In diesem Abschnitt werden Sie lernen, was eine Mapdatei (Mapfile) ist und wie man sie so konfiguriert, dass MapServer eine Shapedatei als Bilder bereitstellt, die mittels einer WMS Anfrage abgerufen werden können.

Was ist ein MapFile ?

Mapfile ist die Konfigurationsdatei, die MapServer nutzt, um raumbezogene Daten wie Bilder oder Vektordaten bereitzustellen. Der Hauptzweck der Datei ist es, die Layer und deren Datenquelle festzulegen sowie die Darstellung zu definieren (z.B. Farbe, Symbole, Labels, etc. ..).

Erstellen einer ersten Mapdatei

  1. Öffnen Sie einen Texteditor (e.g. Applications ‣ Accessories ‣ Leafpad).
  2. Erstellen Sie eine Datei “mapserver_quickstart.map” in Ihrem Home Verzeichnis: /home/user/mapserver_quickstart.map

Fügen Sie folgenden Text ein:

MAP
  NAME "MAPSERVER QUICKSTART"
  EXTENT -137 29 -53 88
  UNITS DD
  SHAPEPATH "/home/user/data/natural_earth2/"
  SIZE 800 600

  IMAGETYPE PNG24

  PROJECTION
    "init=epsg:4326"
  END

  WEB
    METADATA
      ows_enable_request "*"
    END
  END

  LAYER
    NAME "Admin Countries"
    STATUS ON
    TYPE POLYGON
    DATA "ne_10m_admin_0_countries"
    CLASS
      STYLE
        COLOR 246 241 223
        OUTLINECOLOR 0 0 0
      END
    END
  END

END

Note

Das Beispiel verwendet den Natural Earth Datensatz, der bereits auf auf OSGeo-Live vorliegt: ~/data/natural_earth2 (eine Abkürzung für: /usr/local/share/data/natural_earth2)

Jedes Objekt in der Mapdatei beginnt mit seinem Namen (z.B. MAP) und endet mit einem END. Eine Mapdatei beginnt immer mit dem Objekt MAP und sollte eine Liste von LAYER Objekten enthalten, die MapServer lesen und zeichnen kann. In unserer Mapdatei haben wir nur einen Layer definiert.

Lassen Sie uns einen Blick auf einige Objekte (und Eigenschaften) werfen, die in unserer Mapdatei definiert sind:
  • EXTENT : definiert die BoundingBox für diese Konfiguration.
  • LAYER : definiert den Zugriff und die Anzeige-Eigenschaften für einen räumlichen Datensatz. Wir werden weitere Layer später hinzufügen.
  • SHAPEPATH : definiert einen Basispfad für Datei-basierte Daten (z.B. Shapedateien oder TIFF-Dateien).
Wenn wir genauer auf das Objekt LAYER schauen, sehen wir, dass es auch eine Reihe von Objekten und Eigenschaften enthält.
  • STATUS : ob die Karte gezeichnet (ON), nicht gezeichnet (OFF) oder immer gezeichet werden soll (DEFAULT).
  • TYPE : der Geometrietyp, den der MapServer benutzen soll, wenn die Daten als Bild gezeichnet werden. In unserer Mapdatei werden die Daten als Polygon dargestellt.
  • DATA : der Name der Datei, in diesem Fall eine Shapedatei.
  • CLASS : legt fest, wie eine Karte gezeichnet werden soll (styling). Wir gehen darauf später noch genauer ein.

Note

Eine komplette Liste von Objekten und Eigenschaften, die ein Mapfile haben kann, finden Sie in der MapServer Dokumentation.

Erzeugen eines Kartenbildes über die Kommandozeile

Obwohl MapServer für den Einsatz in Webanwendungen ausgerichtet ist, können Bilder auch über die Kommandozeile erzeugt werden. Dies kann beispielsweise bei sich wiederholenden Kartendarstellungen oder beim Debuggen hilfreich sein.

Öffnen Sie ein Terminal und tippen Sie:

shp2img -m mapserver_quickstart.map -o mymap.png

Wenn dieser Aufruf erfolgreich ausgeführt wird, finden Sie unter file:///home/user/mymap.png ein generiertes Kartenbild.

Darstellen einer Karte mit MapServer mittels eines WMS GetMap Requests

Note

Was werden wir lernen ? Sie werden lernen, wie mit Hilfe eines OGC WMS Request über MapServer ein Bild von Layern einer Mapdatei angefordert werden kann.

Öffnen Sie den Webbrowser mit folgender URL:

http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Admin%20Countries&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600

Was bedeutet der Aufruf? Einfach gesagt, es ist ein Web Map Service (WMS) GetMap Request, der MapServer sagt, er soll die angegebene Mapdatei verwenden, um bestimmte Layer als PNG Bild mit festgelegten Eigenschaften wie Bildgröße, Ausdehnung, Projektion, etc.* darzustellen. Alle Layer im “&LAYERS=…” Bereich, die STATUS ON oder STATUS DEFAULT in der Mapdatei haben, werden nun dargestellt. Das Ergebnis sieht wie folgt aus:

../../_images/mapserver_map.png

Note

Alle Parameter des Requests sind WMS-spezifisch, außer “?map=/home/user/mapserver_quickstart.map”, welcher MapServer-spezifisch ist.

Einen neuen Layer im “mapfile” ergänzen, um eine Shapedatei darzustellen

Note

Was werden wir lernen ? Sie werden lernen, wie man neue Layer-Objekte in einer Mapdatei definiert.

Wir ergänzen jetzt einen weiteren Layer zu unserer Mapdatei. Vor dem letzten END in der Datei, fügen wir folgende Layer-Konfiguration hinzu:

LAYER
  NAME "Lakes"
  STATUS ON
  TYPE POLYGON
  DATA "ne_10m_lakes"
  CLASS
    STYLE
      COLOR 153 179 204
    END
  END
 END

Nun haben wir 2 Layer-Definitionen in unserer Mapdatei. Der neue Layer hat die “STATUS ON” Eigenschaft. Das heisst, solange wir ihn nicht explizit anfragen, wird er nicht dargestellt.

Nehmen wir nun unseren vorherigen WMS GetMap Request und ergänzen den neuen Layer “Lakes” zu dem erzeugten Bild. Dazu müssen wir einfach nur den neuen layer Namen zur “LAYERS”-Liste hinzufügen:

http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Admin%20Countries,Lakes&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600

Das Bild, das nun vom MapServer dargestellt wird sieht aus wie das vorherige, nur mit dem zusätzlichen neuen lake-Layer:

../../_images/mapserver_lakes.png

Darstellung eines Layers anpassen mit “mapfile” Konfigurationen

Note

Was werden wir lernen ? Sie sehen ein Beispiel für die Darstellungselemente eines Layers in Abhängigkeit von seinen Eigenschaften.

In einer Mapdatei kann ein Layer-Objekt eine unendliche Anzahl von CLASS-Objekten enthalten. Diese werden verwendet, um die Darstellung von Elementen eines Layers (DATA) zu definieren. Zum Beispiel, wenn wir uns die “10m_lakes” Datei mit einem Tool wie ogrinfo <http://www.gdal.org/ogrinfo.html> anzeigen lassen _, sehen wir die Geometrie und Attribut-Definitionen der Objekte. Diese Attributwerte können verwendet werden, um die Objekte innerhalb eines Datensatzes mit mehreren unterschiedlichen CLASS-Objekten unterschiedlich darzustellen.

Im “10m_lakes” Datensatz haben wir das ScaleRank Attribut, welches in Bezug zur Größe der Seen steht. Wir können es benutzen, um die Seen unterschiedlich darzustellen. Im LAYER-Objekt fügen wir ein weiteres CLASS-Objekt hinzu:

LAYER
 NAME "Lakes"
 STATUS ON
 TYPE POLYGON
 DATA "ne_10m_lakes"
 CLASSITEM "ScaleRank"
 CLASS
   EXPRESSION /0|1/
   STYLE
     COLOR 153 179 204
     OUTLINECOLOR 0 0 0
   END
 END
 CLASS
   STYLE
     COLOR 153 179 204
   END
 END
END

Was macht dieses neue CLASS-Objekt?

Die Klasse definiert, dass das Elemente mit der “ScaleRank”-Eigenschaft gleich “0” oder “1” mit einem schwarzen Umriss gezeichnet werden sollen. CLASS-Objekte werden immer von oben nach unten für jedes Objekt gelesen. Wenn ein Objekt mit der “EXPRESSION” mit einer Klasse übereinstimmt, wird diese Klasse verwendet, um das Objekt darzustellen. Wenn das Objekt nicht mit einer Klasse übereinstimmt, wird es anhand der nächsten Klasse überprüft. Wenn ein Objekt mit keiner Klasse übereinstimmt und die letzte Klasse in einem LAYER-Objekt keine “EXPRESSION” enthält, dann wird diese Klasse als Standard benutzt. Das LAYER-Objekt “CLASSITEM” teilt MapServer mit, welches Attribut bei der Auswertung von EXPRESSIONs benutzt werden soll.

Das Ergebnis dieser Ergänzung bewirkt, dass große Seen mit einem schwarzen Umriss gezeichnet werden:

../../_images/mapserver_lakes_scalerank.png

Note

Lernen Sie mehr über EXPRESSIONS im MapServer.