var my_route = undefined; var my_markers = undefined; OSRM.NO_DESCRIPTION = 0; OSRM.FULL_DESCRIPTION = 1; OSRM.dragging = false; OSRM.pending = false; OSRM.pendingTimer = undefined; // init data function initRouting() { my_route = new OSRM.Route(); my_markers = new OSRM.Markers(); } // decode compressed route geometry function decodeRouteGeometry(encoded, precision) { precision = Math.pow(10, -precision); var len = encoded.length, index=0, lat=0, lng = 0, array = []; while (index < len) { var b, shift = 0, result = 0; do { b = encoded.charCodeAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); var dlat = ((result & 1) ? ~(result >> 1) : (result >> 1)); lat += dlat; shift = 0; result = 0; do { b = encoded.charCodeAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); var dlng = ((result & 1) ? ~(result >> 1) : (result >> 1)); lng += dlng; array.push([lat * precision, lng * precision]); } return array; } // display a transmitted route function timeoutRouteSimple() { showNoRouteGeometry(); showNoRouteDescription(); document.getElementById('information-box').innerHTML = "

"+OSRM.loc("TIMED_OUT")+".

"; } function timeoutRoute() { showNoRouteGeometry(); my_route.hideUnnamedRoute(); showNoRouteDescription(); document.getElementById('information-box').innerHTML = "

"+OSRM.loc("TIMED_OUT")+".

"; } function showRouteSimple(response) { if(!response) return; if (OSRM.JSONP.fences.route) // prevent simple routing when real routing is done! return; if( response.status == 207) { showNoRouteGeometry(); showNoRouteDescription(); document.getElementById('information-box').innerHTML = "

"+OSRM.loc("YOUR_ROUTE_IS_BEING_COMPUTED")+".

"; } else { showRouteGeometry(response); showRouteDescriptionSimple(response); } updateHints(response); // if(OSRM.pending) { // clearTimeout(OSRM.pendingTimer); // OSRM.pendingTimer = setTimeout(timeoutDrag,100); // dirty dirty! // } } function showRoute(response) { if(!response) return; if(response.status == 207) { showNoRouteGeometry(); my_route.hideUnnamedRoute(); showNoRouteDescription(); document.getElementById('information-box').innerHTML = "

"+OSRM.loc("NO_ROUTE_FOUND")+".

"; } else { showRouteGeometry(response); showRouteNonames(response); showRouteDescription(response); snapRoute(); } updateHints(response); } function showNoRouteGeometry() { var positions = []; for(var i=0; i'+OSRM.loc("LINK_TO_ROUTE")+']'; } function showRouteLink_TimeOut(){ document.getElementById('route-link').innerHTML = '['+OSRM.loc("LINK_TO_ROUTE_TIMEOUT")+']'; } function showRouteDescription(response) { // compute query string var query_string = '?z='+ map.getZoom(); for(var i=0; i'+OSRM.loc("GET_LINK")+']'; //var route_link ='['+OSRM.loc("GET_LINK")+']'; // create GPX link var gpx_link = '['+OSRM.loc("GPX_FILE")+']'; // create route description var route_desc = ""; route_desc += ''; for(var i=0; i < response.route_instructions.length; i++){ //odd or even ? var rowstyle='results-odd'; if(i%2==0) { rowstyle='results-even'; } route_desc += ''; route_desc += '"; //route_desc += ''; route_desc += '"; route_desc += ""; } route_desc += '
'; route_desc += ''; route_desc += "'+(i+1)+'.'; route_desc += '' + response.route_instructions[i][0] + ' on '; if( response.route_instructions[i][2] > 0 ) route_desc += response.route_instructions[i][1] + ' for ' + getDistanceWithUnit(response.route_instructions[i][2]) + ''; route_desc += "
'; headline = ""; headline += OSRM.loc("ROUTE_DESCRIPTION")+":
"; headline += '

'; headline += "" + OSRM.loc("DISTANCE")+": " + getDistanceWithUnit(response.route_summary.total_distance) + " - " + OSRM.loc("DURATION")+": " + secondsToTime(response.route_summary.total_time) + ""; headline += '
'; headline += '
'+route_link+'
'+gpx_link+'
'; var output = ""; output += route_desc; document.getElementById('information-box-headline').innerHTML = headline; document.getElementById('information-box').innerHTML = output; } function showRouteDescriptionSimple(response) { headline = OSRM.loc("ROUTE_DESCRIPTION")+":
"; headline += "" + OSRM.loc("DISTANCE")+": " + getDistanceWithUnit(response.route_summary.total_distance) + " - " + OSRM.loc("DURATION")+": " + secondsToTime(response.route_summary.total_time) + ""; headline += '

'; document.getElementById('information-box-headline').innerHTML = headline; document.getElementById('information-box').innerHTML = "

"+OSRM.loc("YOUR_ROUTE_IS_BEING_COMPUTED")+".

"; } function showNoRouteDescription() { headline = OSRM.loc("ROUTE_DESCRIPTION")+":
"; headline += "" + OSRM.loc("DISTANCE")+": N/A" + " - " + OSRM.loc("DURATION")+": N/A" + ""; headline += '

'; document.getElementById('information-box-headline').innerHTML = headline; document.getElementById('information-box').innerHTML = "

"+OSRM.loc("YOUR_ROUTE_IS_BEING_COMPUTED")+".

"; } function showRouteNonames(response) { // do not display unnamed streets? if( document.getElementById('option-highlight-nonames').checked == false) { my_route.hideUnnamedRoute(); return; } // mark geometry positions where unnamed/named streets switch var named = []; for (var i = 0; i < response.route_instructions.length; i++) { if( response.route_instructions[i][1] == '' ) named[ response.route_instructions[i][3] ] = false; // no street name else named[ response.route_instructions[i][3] ] = true; // yes street name } // aggregate geometry for unnamed streets var geometry = decodeRouteGeometry(response.route_geometry, 5); var is_named = true; var current_positions = []; var all_positions = []; for( var i=0; i < geometry.length; i++) { current_positions.push( new L.LatLng(geometry[i][0], geometry[i][1]) ); // still named/unnamed? if( (named[i] == is_named || named[i] == undefined) && i != geometry.length-1 ) continue; // switch between named/unnamed! if(is_named == false) all_positions.push( current_positions ); current_positions = []; current_positions.push( new L.LatLng(geometry[i][0], geometry[i][1]) ); is_named = named[i]; } // display unnamed streets my_route.showUnnamedRoute(all_positions); } // function for dragging and drawing routes function getRoute(do_description) { // if source or target are not set -> hide route if( my_markers.route.length < 2 ) { my_route.hideRoute(); //my_markers.removeVias(); // TODO: do I need this? //my_markers.highlight.hide(); return; } // prepare JSONP call var type = undefined; var callback = undefined; var timeout = undefined; var source = OSRM.DEFAULTS.HOST_ROUTING_URL; source += '?z=' + map.getZoom() + '&output=json' + '&geomformat=cmp'; if(my_markers.checksum) source += '&checksum=' + my_markers.checksum; for(var i=0; i 1){ my_markers.route[0].label = OSRM.SOURCE_MARKER_LABEL; my_markers.route[0].marker.setIcon( new L.Icon('images/marker-source.png') ); my_markers.route[my_markers.route.length-1].label = OSRM.TARGET_MARKER_LABEL; my_markers.route[my_markers.route.length-1].marker.setIcon( new L.Icon('images/marker-target.png') ); } // recompute route getRoute(OSRM.FULL_DESCRIPTION); my_markers.highlight.hide(); } //-------------------- function getDirectionIcon(name) { var directions = { "Turn left":"turn-left.png", "Turn right":"turn-right.png", "U-Turn":"u-turn.png", "Head":"continue.png", "Continue":"continue.png", "Turn slight left":"slight-left.png", "Turn slight right":"slight-right.png", "Turn sharp left":"sharp-left.png", "Turn sharp right":"sharp-right.png", "Enter round-about and leave at first exit":"round-about.png", "Enter round-about and leave at second exit":"round-about.png", "Enter round-about and leave at third exit":"round-about.png", "Enter round-about and leave at forth exit":"round-about.png", "Enter round-about and leave at fifth exit":"round-about.png", "Enter round-about and leave at sixth exit":"round-about.png", "Enter round-about and leave at seventh exit":"round-about.png", "Enter round-about and leave at eighth exit":"round-about.png", "Enter round-about and leave at nineth exit":"round-about.png", "Enter round-about and leave at tenth exit":"round-about.png", "Enter round-about and leave at one of the too many exit":"round-about.png", }; if( directions[name] ) return directions[name]; else return "default.png"; }