Symbolbild Schnelleinstieg con4gis-Forum

Einfaches Routing einrichten

Um das Routing einzurichten sind zwei Schritte nötig. Zunächst muss mithilfe des Backend-Moduls "Routing" eine Routing-Konfiguration angelegt werden. Anschließend muss diese über das Kartenprofil zugeordnet werden.

Routing-Konfiguration

Die Konfiguration des Routings ist in drei Abschnitte geteilt, "Allgemeine Einstellungen", "Erweiterte Einstellungen" und "Routen- und Umkreissuche". Für das grundlegende Routing ist nur der erste Abschnitt erforderlich, weshalb dieses Fallbeispiel nur auf diesen Abschnitt eingeht.

Die erste Einstellung ist die der verwendeten Servertechnik. Dabei stehen Dir mehrere Optionen zur Verfügung:

  • con4gis.io
  • Open Source Routing Machine (OSRM, Version 4 oder 5)
  • Open Route Service (ORS)
  • Graphhopper
  • Valhalla

Für die Auswahl von ORS, Graphhopper oder Valhalla ist zusätzlich ein API-Key erforderlich. Möglichkeiten, einen solchen zu generieren, sind in der Feldbeschreibung im Backend-Modul verlinkt.

Die nächste notwendige Einstellung ist die Einstellung der Lokationsstile für Start und Ziel der Route, damit diese auf der Karte hervorgehoben werden können. Weiterhin kann ein Lokationsstil für Unterwegs-Hinweise eingestellt werden, damit die einzelnen Wegbeschreibungen entlang der Route hervorgehoben werden können.

Alle weiteren Felder sind für eine erste Einrichtung zunächst nicht notwendig.

Zuordnung am Kartenprofil

Im Kartenprofil muss die soeben erstellte Konfiguration noch eingebunden werden. Dazu musst Du im Backend-Modul "Maps: Kartenprofile" in dem Bereich "Routing und Umkreissuche" die Checkbox "Router aktivieren" setzen. Danach erscheint eine Select-Box und Du kannst die angelegte Routing-Konfiguration auswählen.

Blick ins Frontend

Nachdem diese Einstellungen nun alle getätigt wurden, taucht der Router als Bedienelement auf der linken Seite der Karte auf. Über den Schalter kann der Router ein- und ausgeklappt werden. Im Router selbst sind die zwei Eingabefelder für den Startpunkt und das Ziel. Diese können auf unterschiedliche Arten befüllt werden:

  • Eingabe einer Adresse
  • Klick in die Karte: Wenn der Router geöffnet ist und Du auf einen Punkt in die Karte klickst, ermittelt die Anwendung die Adresse des geklickten Punktes und schreibt diesen in das nächste, noch freie Eingabefeld.
  • Positions-Button: Durch einen Klick auf diesen Button ermittelt der Router die aktuelle Position und schreibt die Adresse dieser in das nebenstehende Eingabefeld (funktioniert nur wenn im Browser die Standortermittlung zugelassen ist).

Sobald alle Felder befüllt sind, wird die Suche automatisch (oder über Klick des "Suche starten" Buttons) gestartet und die Route auf der Karte dargestellt.

Erweiterung um Zwischenziele

Eine weitere Funktion ist die Einbindung von Zwischenzielen. Dadurch ist es Dir möglich, einen oder mehrere Zwischenhalte auf Deiner Route einzuplanen. Um diese Funktion zu nutzen, musst Du in der Routing-Konfiguration unter "Erweiterte Einstellungen" die Checkbox "Zwischenziele" aktivieren.

Im Frontend erscheint dann ein neuer Button über den Eingabefeldern für Start- und Zielpunkt. Bei Klick auf diesen Button erscheint zwischen den beiden bestehenden Eingabefeldern ein weiteres Eingabefeld für ein Zwischenziel. Weitere Zwischenziele können jederzeit hinzugefügt werden und werden unterhalb der bestehenden Zwischenziele eingefügt. Die Zwischenziele können über den "Löschen"-Button rechts neben dem Eingabefeld wieder entfernt werden. Die Adressen der Zwischenziele können auf die gleichen Arten ermittelt werden, wie die normalen Start- und Zieladressen. Nachdem die Adresse für ein Zwischenziel ermittelt wurde, wird die Route automatisch mit den neuen Parametern neu berechnet.

Weiterhin können neue Zwischenziele auch hinzugefügt werden, indem die Route mit dem Mauszeiger geklickt und "verschoben" wird. Dabei kannst Du den Punkt der Route, den Du erfasst hast, an den Ort ziehen, wo das Zwischenziel eingefügt werden soll. Auch hier findet eine automatische Neuberechnung der Route statt. Das Zwischenziel wird dort einsortiert, wo es in der Reihenfolge der Route vorkommt.

Einträge aus der OpenStreetMap entlang einer Route darstellen

In diesem Fallbeispiel setzen wir auf die in Fallbeispiel 1 erstellte Routing-Konfiguration auf, suchen Hotels aus der OpenStreetMap und stellen diese entlang der Route dar.

Suche in der OpenStreetMap

Um Einträge aus der OpenStreetMap entlang der Route darzustellen, müssen diese Einträge zunächst gesucht werden. Dazu wird ein Kartenstrukturelement definiert, welches eine Anfrage an die Overpass-API stellt.

Erstelle also zunächst ein neues Kartenstrukturelement, welches innerhalb deiner Karte liegt. Wähle dann als Lokationstyp "Anfrage an Overpass-API (OSM)" aus. Im Feld "Anfrage an Overpass-API (XML-Format)" musst Du nun die entsprechende Anfrage einfügen, die die gewünschten Einträge aus der OpenStreetMap lädt. Da wir in diesem Beispiel Hotels darstellen wollen, fügen wir folgende Anfrage ein

[out:json];

node["tourism"="hotel"]({{bbox}});

out;

und speichern das Kartenstrukturelement.  

Darstellung entlang der Route

Um das Kartenstrukturelement nun entlang der Route darzustellen, muss dies in der Routing-Konfiguration entsprechend definiert sein. Dazu dient das Feld "Kartenstrukturelemente an der Route" im Bereich "Routen- und Umkreissuche". Jeder Eintrag in diesem Feld besteht selbst aus 5 weiteren Feldern:

  • Strukturelement: das Kartenstrukturelement, welches entlang der Route dargestellt werden soll. Unterstützt werden zur Zeit Anfragen an die Overpass-API und Strukturelemente, die Daten aus anderer Tabelle laden.
  • Feldname: Der Schlüssel in den Daten der OpenStreetMap, der zur Auswertung und Sortierung im Router verwendet wird.
  • Buttontext: Die Beschriftung des Buttons. Wenn mehrere Einträge in dem Feld "Kartenstrukturelemente an der Route" gesetzt sind, werden im Router Button dargestellt, mit denen das aktuell dargestellte Strukturelement gewechselt werden kann.
  • Label: Der Name des Feldes, aus dem das Label für den Eintrag im Router generiert wird.
  • Labelfeld: hier kann ein Feldname angegeben werden. Dieses Feld wird, sofern in den Daten der OpenStreetMap vorhanden, an den einzelnen Einträgen auf der Karte als Label dargestellt.

Um nun eine Darstellung des eben erstellten Kartenstrukturelements ("Hotels") zu erreichen, ist dieses Feld wie folgt zu konfigurieren:

Um Informationen zu den Einträgen an der Route im Router darzustellen, muss zusätzlich die Checkbox "Ergebnisliste anzeigen" aktiviert werden. Dadurch werden im Router zwei Button dargestellt, mit denen zwischen der Ergebnisliste und der Wegbeschreibung gewechselt werden kann.

Blick ins Frontend

Im Frontend fallen Dir im Router zwei Unterschiede zum ersten Fallbeispiel auf. Einerseits ist oben ein Button hinzugekommen, der den Wechsel zu der Umkreissuche ermöglicht. Mit diesem Bereich befasst sich Fallbeispiel 4.

Andererseits ist über den Adress-Feldern ein Umweg-Slider hinzugekommen. Mithilfe dieses Sliders kannst Du den Umweg einstellen, den Du beim Abfahren der Route maximal in Kauf nehmen möchtest, um zu den dargestellten Einträgen zu gelangen. Einträge, die weiter von der Route entfernt sind als der ausgewählte Umweg werden in der Karte nicht dargestellt. Aber auch nach dem Starten der Suche kann der Umweg jederzeit anders eingestellt werden und löst eine neue Suche aus.

Nun kannst Du eine Route berechnen. Wenn im angegebenen Umkreis entlang der Route Hotels in der OpenStreetMap verzeichnet sind, werden diese automatisch in der Karte markiert (siehe Abbildung "Einträge auf Karte dargestellt"). Desweiteren erscheint im Router eine Ergebnisliste mit Detailinformationen zu jedem Eintrag (siehe Abbildung "Einträge im Router dargestellt"). Auch sind nun die Button "In der Nähe" und "Routenhinweise" zu sehen, mit denen zwischen der Ergebnisliste und der Wegbeschreibung hin- und hergewechselt werden kann.

 

Einträge im Router dargestellt
Einträge auf der Karte dargestellt

Einträge aus einer anderen Tabelle entlang der Route darstellen

In diesem Fallbeispiel werden wir Einträge aus der Contao-Events-Tabelle entlang einer Route darstellen.

Erstelle dazu zunächst ein neues Kartenstrukturelement mit dem Lokationstyp "Aus anderer Tabelle". Hier kannst du dann als Quelltabelle "Events" auswählen. Prinzipiell können hier noch weitere Einschränkungen für die Abfrage gemacht werden, in diesem Fall laden wir aber einfach alle Events in die Karte.

Danach muss die Konfiguration an der Routing-Konfiguration angepasst werden. Dazu muss eine weitere Zeile in das Feld Strukturelemente an der Route eingefügt werden und wie folgt konfiguriert werden:  

 

In den Feldern "Feldname" und "Label" können komma getrennt auch mehrere Werte angegeben werden, die dann links im Router zu den einzelnen Einträgen auftauchen. Dabei ist zu beachten, dass die jeweiligen Feldnamen auch in der Antwort des Routing-Requests vorhanden sein müssen. Desweiteren sollte darauf geachtet werden, dass die Reihenfolge der Labels auch zu der Reihenfolge der Feldnamen passt.

Im Frontend ist nun oben im Router eine Selectbox zu sehen, mit der man zwischen der Darstellung von Hotels und den Daten aus anderer Tabelle wechseln kann (hier würden auch weitere Einträge auftauchen, wenn man diese im Backend entsprechend konfiguriert). Ansonsten ist der Aufbau der gleiche wie der in Fallbeispiel 2, mit der Ausnahme, dass die Beschreibung der einzelnen Einträge im Router anders aufgebaut ist. Dies liegt daran, dass bei Einträgen aus der OpenStreetMap alle Daten angezeigt werden, die dort gepflegt sind.

Suche in der Nähe (Umkreissuche)

In diesem Fallbeispiel beschäftigen wir uns mit dem zweiten Bestandteil des Routers, der Umkreissuche. Dazu verwenden wir das Kartenstrukturelement aus Fallbeispiel 2, die Hotels aus der OpenStreetMap, und suchen nach diesem im Umkreis.

Auch die Routing-Konfiguration können wir aus Fallbeispiel 2 übernehmen. Um diesen Fallbeispiel möglichst einfach zu halten, kannst Du aber noch im Feld "Initiale Sicht" auf Umkreissuche umschalten, um direkt die gewünschte Sicht zu erhalten.

Im Frontend ist jetzt nach Öffnen des Routers die Umkreissuche zu sehen. Wenn Du nun eine Adresse angibst und die Suche startest, werden im eingestellten Umkreis alle Einträge des verknüpften Kartenstrukturelements (in unserem Fall Hotels) dargestellt, die in diesem Umkreis liegen.