../../_images/logo_mapserver.png ../../_images/OSGeo_project.png

MapServer Quickstart

MapServer ist eine serverbasierte Open Source-Anwendung, mit der Sie Kartenbilder und Vektordaten über das Internet mit Hilfe OGC Standards wie Web Map Service (WMS), Web Feature Service (WFS) und Web Coverage Service (WCS) veröffentlichen können.

Konfigurieren von MapServer mithilfe der Mapfile-Konfigurationsdatei

Bemerkung

Was lerne ich? In diesem Abschnitt erfahren Sie, was ein Mapfile ist und wie es so konfiguriert wird, dass MapServer ein Shape-Datei als Bild ausgeben kann und dabei dem WMS Standard folgt.

Was ist ein Mapfile ?

Das Mapfile ist die Konfigurationsdatei, die MapServer verwendet, um Geodaten als Bilder oder Vektordaten zu rendern. Im Mapfile werden Ebenen definiert, die gezeichnet werden können, es erfolgt ein Verweis auf die Daten und die Zeichenvorschrift wird definiert (z. B. Farbe, Symbol, Etikett usw.).

Erstellen meines erstes Mapfiles

  1. Öffnen Sie einen beliebigen Texteditor (z.B. Applications ‣ Zubehör ‣ FeatherPad).

  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_title "MapServer Quickstart"
          ows_enable_request "*"
          ows_srs "EPSG:4326 EPSG:25832 EPSG:25833"
        END
      END
    
      LAYER
        NAME "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
    

    Bemerkung

    Das Beispiel verwendet den Natural-Earth-Datensatz, der sich bereits auf OSGeoLive unter /data/natural_earth2 befindet (Abkürzung zu /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.

Werfen wir einen Blick auf einige der Objekte (und Eigenschaften), die in unserem Mapfile 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 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 MapServer beim Rendern der Daten als Bild verwenden soll. In unserer Mapfile werden die Daten als polygons gezeichnet.

  • 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.

Bemerkung

Eine vollständige Liste der verfügbaren Objekte und Eigenschaften, über die ein Mapfile verfügen kann, finden Sie auf der MapServer documentation page.

Darstellen einer Karte mit MapServer mittels eines WMS GetMap Requests

Bemerkung

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=Countries&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600

Was bedeutet dieser Aufruf? Einfach gesagt, es ist ein Web Map Service Web Map Service (WMS) GetMap-Request, der MapServer sagt, dass er die angegebene Mapdatei verwenden soll, 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

Bemerkung

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

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 (Applications ‣ System Tools ‣ Terminal Emulator) und geben Sie ein:

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.

Einen neuen Layer in dem Mapfile ergänzen, um eine Shapedatei darzustellen

Bemerkung

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

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 heißt, 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=Countries,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 über die Mapfile-Konfigurationen anpassen

Bemerkung

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 zahlreiche 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 Werkzeug wie ogrinfo 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.

In unserem „ne_10m_lakes“-Datensatz haben wir ein Attribut ScaleRank, das mit der Größe der Seen zusammenhängt. Wir können dies nutzen, um die Seen unterschiedlich darzustellen. Im LAYER-Objekt fügen wir ein weiteres CLASS-Objekt kurz vor unserem aktuellen 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

Bemerkung

Lernen Sie mehr über EXPRESSIONS im MapServer.

Veröffentlichen Ihrer Daten als OGC WMS (Web Map Service)

MapServer unterstützt verschiedene OGC-Standards wie OGC WMS, WFS oder WCS. Mit OGC WMS können Sie Ihre Daten als Map Service veröffentlichen und den Service in ein Desktop-GIS wie QGIS oder in einen Web-Client wie OpenLayers oder Mapbender einbinden.

Verwenden von QGIS Desktop zum Laden Ihres OGC WMS

  1. Start QGIS via Geospatial ‣ Desktop GIS ‣ QGIS Desktop

  2. Go to Layer ‣ Add Layer ‣ Add WMS/WMTS Layer.

  3. Klicken Sie auf die Schaltfläche Neu, fügen Sie einen Namen und Ihre Service-URL hinzu.

  4. Speichern Sie Ihre Angaben.

    http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.3.0

Anschließend können Sie eine Verbindung zu Ihrem Dienst herstellen und Ihrem QGIS-Projekt eine oder mehrere Layer des Dienstes hinzufügen. Wenn Sie den Layer mit der ID 0 auswählen, können Sie den gesamten Dienst mit allen Layern gleichzeitig laden.

../../_images/mapserver_load_wms_to_qgis.png

Was kommt als Nächstes?

Dies ist ein einfaches Beispiel und Sie können noch viel, viel mehr machen. Die MapServer Projekt Webseite enthält zahlreiche Hilfen, um Ihnen einen einfachen Einstieg zu ermöglichen. Hier sind ein paar Tipps, wo sie als nächstes nachschauen können:

  • Lesen Sie die Introduction to MapServer.

  • Schauen Sie sich das MapServer Tutorial an, es enthält weitere Mapdatei-Beispiele.

  • Lesen Sie über OGC Support and Configuration um mehr über OGC Standards im MapServer (WMS, WFS, SLD, WFS Filter Encoding, WCS, SOS, etc.) zu lernen.

  • Bereit, mit dem MapServer zu arbeiten? Dann tragen Sie sich in die Mailing Listen der Community ein, um Ideen auszutauschen, Verbesserungen zu diskutieren und Fragen zu stellen.