var map = L.map('map').setView([0, 0], 2); L.tileLayer( 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap', subdomains: ['a','b','c'] }).addTo( map ); var popup = L.popup(); var fromMarker = L.marker([0,0], {icon: blueIcon}); var toMarker = L.marker([0,0], {icon: greyIcon}); function setFrom(e) { setField("from"); fromMarker.setLatLng(popup.getLatLng()).addTo(map); } function setTo(e) { setField("to"); toMarker.setLatLng(popup.getLatLng()).addTo(map); } function setField(field) { var latlng = sanitizeLatLng(popup.getLatLng()) document.getElementById(field).value = latlng.lat + "," + latlng.lng; popup.close() } function sanitizeLatLng(latlng){ // "modulo around the world" while keeping the range from -180 to 180 latlng.lng = (((latlng.lng +180) % 360) + 360) % 360 - 180 return latlng } function onMapClick(e) { popup .setLatLng(e.latlng) .setContent("

Position " + e.latlng + '

') .openOn(map); } map.on("click", onMapClick); let routeObject = L.geoJSON(); async function get_random_route() { let result = await fetch("/random") if (result.ok) { let json = await result.json() show_route(json) } else { alert("an error occured while finding the route"); } } function show_route(route){ clear_route(); routeObject = L.geoJSON(route).addTo(map); } function clear_route() { routeObject.remove() } function set_route_cost(cost) { let field = document.getElementById("routecost"); field.value = cost; } function set_algorithm_type(alg) { let field = document.getElementById("algorithm_used"); field.value = alg; } async function get_route() { let form = document.getElementById("queryform"); data = new FormData(form); let response = await(fetch("/route", { method: "POST", body: data })); let result = await response.json(); set_algorithm_type(result.algorithm); if (result.success === true) { set_route_cost(result.route.cost); show_route(result.route.geojson); } else { set_route_cost(null); clear_route(); alert("No Route found!"); } }