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

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.

Configure MapServer using the Mapfile configuration file

Bemerkung

What will I learn ? In this section, you will learn what a Mapfile is and how to configure it to allow MapServer to serve a shapefile as images using WMS requests.

What is a 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. ..).

Creating my first Mapfile

  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_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 :datei:‘/usr/local/share/data/natural_earth2‘).

Each object in a Mapfile starts with its name (for example MAP) and ends with an END. A Mapfile always starts with the MAP object and should contain a list of LAYER objects the Mapfile can read and draw. In our Mapfile, we currently have only one layer defined.

Let’s take a look at some of the objects (and properties) defined in our Mapfile:

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

If we look closer at the LAYER in our Mapfile, we’ll see that it contains a bunch of properties and objects too. Among them are:

  • STATUS : ob die Karte gezeichnet (ON), nicht gezeichnet (OFF) oder immer gezeichet werden soll (DEFAULT).
  • TYPE: the geometry type that MapServer should use when rendering the data as an image. In our Mapfile, the data will be drawn as polygons.
  • 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

A complete list of the available objects and properties a Mapfile can have can be found in the MapServer documentation page.

Darstellen einer Karte mit MapServer mittels eines WMS GetMap Requests

Bemerkung

What will I learn ? You will learn how to use to render an image with layers from a Mapfile with MapServer using an OGC WMS request.

Ö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

What does the above mean? If we put it in simple words, it’s a Web Map Service (WMS) GetMap request that tells MapServer to „use the following Mapfile to render the specified layers as a png image based on some user-supplied parameters such as image size, geographical extent, projection, etc.“. All layers specified in the „&LAYERS=…“ property having STATUS ON in the Mapfile will be rendered in addition to all layers with STATUS DEFAULT. The result looks like the following:

../../_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 (:menuselection:‘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.

Add a new layer to the Mapfile to serve a local Shapefile

Bemerkung

What will I learn ? You will learn how to add a new layer object definition to your Mapfile.

We will now add a new layer to our Mapfile. Before the last END statement in the Mapfile, add the following layer configuration:

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

Now we have 2 layer definitions in our Mapfile. Note that the new one we just added has the „STATUS“ property set to „ON“. That means that unless we specifically request it, it won’t be rendered.

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

Style a layer using Mapfile configurations

Bemerkung

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

In a Mapfile, a LAYER object can contain an infinite number of CLASS objects. These are used to style the elements contained in the spatial data file (DATA). For example, if we look closer at our „ne_10m_lakes“ data file using a tool such as ogrinfo, we’ll see the geometry and attribute definitions it contains. These attribute values can be used as a way to draw the elements inside a dataset differently using multiple CLASS objects.

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. Go to Layer ‣ Add Layer ‣ Add WMS/WMTS Layer.

  2. Click button New and add a name and your Service URL

  3. Save your settings:

    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.
  • Have a look at the MapServer Tutorial which contains more Mapfile examples.
  • 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.