UMN MapServer - Tipps und Tricks

Aus GISpunkt HSR
Wechseln zu: Navigation, Suche

Tipps und Tricks für den Einsatz von UMN MapServer können hier publiziert werden.

Das Wiki ist für diese Zusammenstellung deshalb wohl das geeignete Medium, weil sich derartige Anleitungen oft durch zufällige Entdeckungen ergeben und es oftmals verschiedene Wege zum gleichen oder ähnlichen Ziel gibt. Hier können darum sehr einfach laufende Verbesserungen, Neuentdeckungen, einfachere Alternative oder noch ausgefeiltere Tricks um zum gesuchten Resultat zu kommen durch alle HSR-GIS-Anwender zum Nutzen aller untergebracht werden.

Siehe auch: UMN MapServer, WMS, WFS/WCS, SLD

Mapfile editieren

Mapfile generieren

  • AXL (Kommandozeilen-Tool)
    • Mapfile erzeugen aus .axl-Datei (saved from ArcExplorer): http://msconsole.sourceforge.net/ . MSConsole is a Java command line program that will generate a valid mapserver .map file from an AXL (an ESRI xml format) file.
    • Möglichkeit mit einem XSLT-Prozessor (Ruby)
  • ArcMap-Extension (Visual Basic)
  • .lyr LYR (Kommandozeilen-Tool)
    • Was noch fehlt: Ein Commandline-Tool, das ein Mapfile aus Layer-Files (LYR) erstellt... (über Layer-Dateien)

SLD generieren

  • ArcMap2SLD ArcGIS-map to SLD Converter - Ein Werkzeug zum Auslesen von Stylinginformationen aus ArcMap® und deren Darstellung in Styled Layer Descriptor-Dateien (SLD). Extension. Benötigt ArcMap (Visual Basic.NET)
  • Mit PHP Mapscript 4.4 kann man aus Mapfile .map-Dateien (siehe oben) .sld generieren: 10 Easy steps for converting mxd to map & sld

Steuerung der Darstellungspriorität

Problem: Beim Rendern ohne Prioritaeten werden z.B. Straßen gemischter Kategorie in der Reihenfolge gerendert, in der sie von der Datenbank geliefert werden (nach ID). Das führt dazu, dass manchmal einmuendende untergeordnete Straßen über die Straßen hoeherere Kategorie gezeichnet werden.

Lösung: Einer Klasse (z.B. Straßen-Kategorie) ein Attribut Priorität zuordnen. Das kann dann zur Überlagerungs-Steuerung individueller Objekte aber auch ganzer Klassen verwendet werden.

Die Daten werden dann vorher mit ORDER BY sortiert (in einer View), so dass dann Objekte mit niedriger Priorität zuerst rendern lassen.

Hintergrund: Die Arbeitsweise des UMN MapServers beim Rendern ist:

  • Alle Daten zu einem Layer werden geholt.
  • Je Datensatz werden alle Classes des Layers durchlaufen.
  • Die erste Class, die 'passt' rendert den Satz, dann wird der nächste Satz gelesen.
  • Die Reihenfolge der Classes im WMS-Layer wirkt sich also nur auf die Filterung aus (erster Treffer), aber NICHT auf die Render-Priorität.

D.h. Die Reihenfolge der WMS-Layer hat Priorität. Nur die Klassen innerhalb eines WMS-Layers kann man nach OSM-Layer-Attribut prorisieren.

Siehe auch OpenStreetMap.

Liste mit allen Symbolen

(Quelle: mapserver-dev mailing list). I want to preview the symbols in a symbol file by drawing them without drawing the whole mapfile, is that possible and how can I do that?

  • There used to be a sym2img utility but it's been busted awhile.
  • If you have class names defined you could simply request a legend from the CGI and look at things that way (e.g. mapserv?mode=legend&map=foo.map).
  • There's also a legendicon mode in the dev (5.2) version of the MapServer CGI. The mode is "legendicon" and there's a new "icon" parameter that takes a value like [layer]{:class} where layer is a layer name and (optionally) class number (starting with 0 I think). You could probably easily create an HTML page full of these links and preview things that way. The legendicon is not dependent on the presence of a class name so it can be used on any layer/class combination. Here's an example:
 http://maps.dnr.state.mn.us/cgi-bin/mapserv50?map=COMPASS_MAPFILE&mode=legendicon&icon=lake_dnrpy2

Klickbare HTML-Karte generieren

Generating clickable (html) image maps with UMN MapServer webpage.