Map Matching
SmartMaps unterstützt ab Version 3.7
die Funktionalität des Map Matching. Dieses erstellt auf Basis einzelner Wegpunkte einen Routenverlauf. In diesem Beispiel können durch Klick auf die Karte die einzelnen Zwischenstandorte simuliert werden.
Das Beispiel ist vollständig; Sie können es lokal in einer Datei abspeichern und im Browser aufrufen. Sie müssen lediglich den Wert für den apiKey
ersetzen.
Klicken Sie auf die Karte und erzeugen Sie mindestens zwei Wegpunkte, um die Berechnung des Match-Routings für die gewählten Punkte auszulösen. Achten Sie dabei darauf, dass die Punkte möglichst in der Nähe des Straßennetzes befinden. Für die Berechnung wird das Auto-Routing mit dem neuen Match-Routing verwendet.
SmartMaps-Karte
Codebeispiel: Map Matching
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Map Matching</title>
</head>
<body>
<div id="map-wrapper">
<div id="waypoints">
<textarea
id="waypointsInput"
placeholder="Wegpunkte"
rows="10"
readonly
></textarea>
<span id="waypointsInputLabel"></span>
</div>
<div id="map" style="height: 350px;"></div>
</div>
<!-- SmartMaps-API -->
<script src="https://www.yellowmap.de/api_rst/api/loader?libraries=free-3&apiKey={API_KEY}"></script>
<script>
ym.ready(function (modules) {
//Textfeld bestimmen, um Wegpunkte darstellen zu können:
var waypointsInputTextArea = document.getElementById("waypointsInput");
//Karte initialisieren
var map = ym.map("map", {
center: [49.02166, 8.43942],
zoom: 17,
});
//GeoJSON Layer für Match-Routing initalisieren und in Karte einzeichnen
var matchLayer = ym.geoJson();
matchLayer.addTo(map);
//GeoJSON Layer für Wegpunkte initalisieren und in Karte einzeichnen
var waypointsLayer = ym.geoJson();
waypointsLayer.addTo(map);
//Wenn Daten zu GeoJSON Layer hinzugefügt werden, Karte an Route ausrichten
matchLayer.on("add", (e) => {
if (!map.getBounds().contains(matchLayer.getBounds())) {
map.fitBounds(matchLayer.getBounds());
}
});
//Match-Routing für das Map Matching initalisieren
var matchRouting = new ym.services.MatchRouting();
//Match-Routing bei erfolgreicher Abfrage einzeichnen
matchRouting.on("success", function (request, response) {
console.log(response);
matchLayer.clearLayers();
matchLayer.addData(response.body);
});
//Liste für Wegpunkte initialisieren
var waypoints = [];
//Match-Routing bei Click auf Karte berechnen
map.on("click", function (e) {
//Koordinate des Wegpunkts bestimmen und Marker in Karte einzeichnen
var latlng = e.latlng;
var marker = ym.marker(latlng).addTo(waypointsLayer);
//Wegpunkt hinzufügen und ab mind. zwei Wegpunkten das Matching berechnen
waypoints.push([latlng.lng, latlng.lat]);
waypointsInputTextArea.value = JSON.stringify(waypoints);
if (waypoints.length >= 2) {
matchRouting.calcRoute(waypoints);
}
});
});
</script>
</body>
</html>