Drupal: Karte mit GPX-Tracks und Waypoints

Der Artikel beschreibt, wie man in Drupal mehrere GPX-Tracks und Wegpunkte auf einer Karte darstellen kann. Die Tracks und WPs werden dabei nicht wie üblich in eigenen Knoten abgelegt sondern in dem Knoten, in den die Karte eingebunden wird. Ein typischer Anwendungsfall hierfür sind Artikel, in denen Rad- oder Wandertouren beschrieben werden.

Mit den Modulen *Leaflet* und *Openlayers* kann auf einfache Weise eine Karte in einen Drupal-Knoten eingebunden werden, auf welcher der Inhalt *anderer* Knoten dargestellt wird. Einfachstes Beispiel ist eine Karte, auf welcher der Standort aller oder einer Gruppe von Usern dargestellt wird. Die hier zugrunde gelegte Anwendung lässt sich mit dieser Methode zwar realisieren (siehe [Artikel](/node/343)), hat aber den Nachteil, dass für jeden Track und jeden Waypoint ein eigener Knoten angelegt werden muss. Dies geht zur Lasten der Übersichtlichkeit und ist insbesondere für weniger geübte Nutzer sehr schwer zu verstehen. Die hier vorgestellte Lösung erfordert zwar mehr Aufwand bei der Einrichtung des Inhaltstyps, kommt aber mit einem einzigen Knoten pro Artikel aus.

Benötigte Module

Es werden folgende Module benötigt:

  • Openlayers (mit den Untermodulen UI und Views),
  • Proj4,
  • Geofield,
  • Viewfield und
  • Field Collection

Erstellen des Inhaltstyps “Tour”

Neben den üblichen Feldern wie Titel und Body werden für die Kartendarstellung folgende Felder angelegt:

  • eine Field Collection Tracks
  • eine Field Collection Waypoints
  • ein View Field Tour Map

Field Collection Tracks

Beim Anlegen des Felds können bis auf die Anzahl der Feldwerte die Default-Werte übernommen werden. Anschließend werden unter Struktur/Field Collections die Unterfelder der Collection angelegt:

  • ein Datei-Feld GPX File. Als zulässige Dateiendung wird gpx angegeben, Anzahl von Werten wird auf 3 gesetzt, ansonsten können die Voreinstellungen übernommen werden. Sinnvoll ist, das Beschreibungs-Feld zu aktivieren.
  • ein Geofield Geodata mit Steuerelement (Widget) geocode from another field. Als Datenquelle wird GPX File, als Geocoder GPX konfiguriert.
  • optional weitere Felder, über welche die Darstellung des Tracks beeinflusst werden kann, zum Beispiel
    • ein Textfeld Color, in dem der HTML-Farbcode abgelegt werden kann, z.B. # FF0000

Field Collection Waypoints

Wie bei Tracks werden beim Anlegen des Felds bis auf die Anzahl der Feldwerte die Default-Werte übernommen. Anschließend werden unter Struktur/Field Collections die Unterfelder der Collection angelegt:

  • ein Geofield Geodata mit Steuerelement (Widget) Openlayers Map. In den Feldeinstellungen werden die verfügbaren Features auf Punkte beschränkt und der Zoomausschnitt der Karte festgelegt. Dies bewirkt, dass bei der Eingabe des Inhalts eine Karte angezeigt wird, auf der die Position des Wegpunkts festgelegt werden kann.
  • ein Textfeld (lang) Description, welches die Beschreibung des Wegpunkts aufnehmen wird.

Die Kartenansicht Tour Map (map view)

Die View, mittels deren die Tracks und Waypoints auf einer Karte angezeigt werden, besteht aus mehreren View-Seiten:

  • eine Datenseite Data
  • eine Seite Waypoints für den Layer mit den Waypoints
  • je eine Seite Track i für jeden anzuzeigenden Track. Sollen bis zu drei Tracks angezeigt werden, werden drei Seiten Track 1, Track 2 und Track 3 angelegt.
  • eine Seite Map, mit der letzendlich die Karte, die Tracks und die Waypoints angezeigt werden.

Die Einstellungen der einzelnen Seiten sind sehr unterschiedlich. Es muss unbedingt darauf geachtet werden, die individuellen Einstellungen jeder Seite nur auf diese Seite anzuwenden (übersteuern) und nicht auf andere Seiten zu übertragen.

Der Kontextfilter aller Seiten wird auf Inhaltsversion: Beitrags-ID gesetzt, damit der anzuzeigende Knoten über den URL selektiert werden kann.

Zugriff auf die Elemente einer Field Collection

Um die Daten einer Field Collection anzeigen zu können muss diese unter Erweitert/Beziehungen(Relations) eingetragen werden. Der Parameter Delta in den Einstellungen wird dabei je nach Art der Seite auf “alle” oder den Index des gewünschten Elements der Collection gesetzt. Anschließend können die Daten der Collection in der Liste der anzuzeigenden Felder verwendet werden. Im Dialog “Felder hinzufügen” kann man hierzu nach Field Collection Item filtern.

Datenseite Data Page

Diese Seite ist für die Funktion nicht erforderlich. Sie dient im wesentlichen zu Testzwecken, z.B. um die Geodaten in Rohform anzuzeigen oder um mit den verschiedenen Einstellungen zu experimentieren. Das Format der Seite ist eine unformatierte Liste.

Seite Waypoints für den Layer mit den Waypoints

Die Seite wird mit Hinzufügen / Openlayers Data Overlay hinzufügen erstellt. Danach wird die Seite in Waypoints umbenannt und das Format der Seite auf OpenLayers Vector Data Overlay gesetzt.

Unter Erweitert/Beziehungen(Relations) wird wird das Collection-Feld Waypoints des Inhaltstyps Tour eingetragen und Delta auf “alle” gesetzt. Dies bewirkt, dass der Layer alle Waypoints des anzuzeigenden Knotens enthält. Anschließend können die Daten der Collection in der Feldliste hinzugefügt werden: Geodata und Description. Zuletzt muss noch in den Format-Einstellungen die Datenquelle der Karte auf Typ=WKT, WKT-Feld=Geodata und Description Content=Description gesetzt werden.

Mit der Ansichtsseite wird automatisch auch eine Openlayers-Kartenebene angelegt (siehe: Struktur/Openlayers/Ebenen)

Seiten Track 1 für den ersten Tracklayer

Die Seite wird mit Hinzufügen / Openlayers Data Overlay hinzufügen erstellt. Danach wird die Seite in Track 1 umbenannt und das Format der Seite auf OpenLayers Vector Data Overlay gesetzt.

Unter Erweitert/Beziehungen(Relations) wird wird das Collection-Feld Tracks des Inhaltstyps Tour eingetragen und Delta auf “1” gesetzt. Dies bewirkt, dass die Daten der ersten GPX-Datei verwendet werden. Anschließend können die Daten der Collection in der Feldliste hinzugefügt werden: Geodata, Description, Color. Zuletzt muss noch in den Format-Einstellungen die Datenquelle der Karte auf Typ=WKT, WKT-Feld=Geodata und Description Content=Description gesetzt werden.

Mit der Ansichtsseite wird automatisch auch eine Openlayers-Kartenebene angelegt (siehe: Struktur/Openlayers/Ebenen)

Für die weiteren Tracks wird auf dieselbe Weise ein Kartenlayer Track 2 und Track 3 angelegt.

Wenn Feldwerte im Kartenstil verwendet werden sollen, dann muss darauf geachtet werden, dass die Rohdaten ohne HTML verwendet werden. Dies erreicht man, indem in den Anzeigeeinstellungen (Format/Anzeigen) Provide default field wrapper elements deaktiviert wird.

Karte anlegen

Vor dem nächsten Schritt muss eine OL-Karte angelegt werden, in der die erzeugten Layer angezeigt werden. Dafür geht man nach _Struktur/Openlayers/Maps und erzeugt eine neue Karte ol_tour_map und aktiviert den Waypoint-Layer und die Track-Layer.

Seite Map

Wieder zurück in der Ansicht Tour Map wird eine neu Seite Map vom Typ _OpenLayers Map_angelegt, in den Format-Einstellungen die soeben erzeugte OL-Karte eingetragen und ein Pfad festgelegt, z.B. …/tourmap

Kartenansicht zum Inhaltstyp hinzufügen

Dem Inhaltstyp Tour wird jetzt noch die Kartenansicht hinzugefügt:

  • Neues Feld vom Typ “Ansichten” anlegen
  • “Immer den Standardwert verwenden” auswählen
  • Standardwert: tour_map - map
  • Argumente: [node:nid]

Das war’s Wenn Probleme auftreten, liegen diese meist daran, dass beim Erstellen der Ansichtsseiten bereits gemachte Einstellungen versehentlich überschrieben werden, weil nicht mit “Übersteuern” gearbeitet wurde.

Offene Punkte

  • Die Track-Layer werden im Layer-Swtcher mit dem Namen der Ansichtsseite angezeigt, also Track 1, Track 2, usw. Schöner wäre natürlich, wenn das Description