moved routing functions to OSRM namespace,

added functions to measure JSONP timings
This commit is contained in:
DennisSchiefer 2012-03-28 12:57:42 +01:00
parent 1a9776cff9
commit e132ac5c53
7 changed files with 107 additions and 100 deletions

View File

@ -60,7 +60,7 @@ _onclickResult: function(marker_id, lat, lon) {
OSRM.G.markers.route[index].show(); OSRM.G.markers.route[index].show();
OSRM.G.markers.route[index].centerView(); OSRM.G.markers.route[index].centerView();
getRoute(OSRM.C.FULL_DESCRIPTION); OSRM.Routing.getRoute(OSRM.C.FULL_DESCRIPTION);
}, },

View File

@ -26,6 +26,7 @@ OSRM.JSONP = {
callbacks: {}, callbacks: {},
timeouts: {}, timeouts: {},
timers: {}, timers: {},
durations: {},
// default callback routines // default callback routines
@ -50,7 +51,7 @@ OSRM.JSONP = {
OSRM.JSONP.fences[id] = undefined; // clean fence OSRM.JSONP.fences[id] = undefined; // clean fence
} }
// OSRM.debug.log("[jsonp] timout handling: "+id); OSRM.debug.log("[jsonp] timout handling: "+id+" "+ (new Date() - OSRM.JSONP.durations[id]) );
}; };
// wrap callback function // wrap callback function
@ -66,7 +67,7 @@ OSRM.JSONP = {
OSRM.JSONP.fences[id] = undefined; // clean fence OSRM.JSONP.fences[id] = undefined; // clean fence
} }
// OSRM.debug.log("[jsonp] response handling: "+id); OSRM.debug.log("[jsonp] response handling: "+id+" "+ (new Date() - OSRM.JSONP.durations[id]) );
}; };
// clean DOM (unfortunately, script elements cannot be reused by all browsers) // clean DOM (unfortunately, script elements cannot be reused by all browsers)
@ -83,6 +84,7 @@ OSRM.JSONP = {
// start timeout timer // start timeout timer
OSRM.JSONP.timers[id] = setTimeout(OSRM.JSONP.timeouts[id], timeout); OSRM.JSONP.timers[id] = setTimeout(OSRM.JSONP.timeouts[id], timeout);
OSRM.JSONP.durations[id] = new Date();
// OSRM.debug.log("[jsonp] init: "+id); // OSRM.debug.log("[jsonp] init: "+id);
return true; return true;
@ -94,5 +96,6 @@ OSRM.JSONP = {
OSRM.JSONP.callbacks = {}; OSRM.JSONP.callbacks = {};
OSRM.JSONP.timeouts = {}; OSRM.JSONP.timeouts = {};
OSRM.JSONP.timers = {}; OSRM.JSONP.timers = {};
OSRM.JSONP.durations = {};
} }
}; };

View File

@ -114,12 +114,12 @@ onClick: function(e) {
} }
} }
getRoute(OSRM.C.FULL_DESCRIPTION); OSRM.Routing.getRoute(OSRM.C.FULL_DESCRIPTION);
OSRM.G.markers.highlight.hide(); OSRM.G.markers.highlight.hide();
}, },
onDrag: function(e) { onDrag: function(e) {
this.parent.setPosition( e.target.getLatLng() ); this.parent.setPosition( e.target.getLatLng() );
getRoute(OSRM.C.NO_DESCRIPTION); OSRM.Routing.getRoute(OSRM.C.NO_DESCRIPTION);
OSRM.Geocoder.updateLocation( this.parent.label ); OSRM.Geocoder.updateLocation( this.parent.label );
}, },
onDragStart: function(e) { onDragStart: function(e) {
@ -139,7 +139,7 @@ onDragStart: function(e) {
onDragEnd: function(e) { onDragEnd: function(e) {
OSRM.G.dragging = false; OSRM.G.dragging = false;
this.parent.setPosition( e.target.getLatLng() ); this.parent.setPosition( e.target.getLatLng() );
getRoute(OSRM.C.FULL_DESCRIPTION); OSRM.Routing.getRoute(OSRM.C.FULL_DESCRIPTION);
if (OSRM.G.route.isShown()) { if (OSRM.G.route.isShown()) {
OSRM.G.route.hideOldRoute(); OSRM.G.route.hideOldRoute();
OSRM.G.route.hideUnnamedRoute(); OSRM.G.route.hideUnnamedRoute();

View File

@ -63,7 +63,7 @@ findViaPosition: function( new_via_position ) {
var index = OSRM.G.markers.setVia(new_via_index, new_via_position); var index = OSRM.G.markers.setVia(new_via_index, new_via_position);
OSRM.G.markers.route[index].show(); OSRM.G.markers.route[index].show();
getRoute(OSRM.C.FULL_DESCRIPTION); OSRM.Routing.getRoute(OSRM.C.FULL_DESCRIPTION);
return new_via_index; return new_via_index;
} }

View File

@ -44,7 +44,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
<script src="OSRM.base.js" type="text/javascript"></script> <script src="OSRM.base.js" type="text/javascript"></script>
<script src="OSRM.config.js" type="text/javascript"></script> <script src="OSRM.config.js" type="text/javascript"></script>
<!-- <script defer="defer" src="OSRM.debug.js" type="text/javascript"></script> --> <script defer="defer" src="OSRM.debug.js" type="text/javascript"></script>
<script src="OSRM.Browser.js" type="text/javascript"></script> <script src="OSRM.Browser.js" type="text/javascript"></script>
<script src="OSRM.GUI.js" type="text/javascript"></script> <script src="OSRM.GUI.js" type="text/javascript"></script>
@ -88,14 +88,14 @@ or see http://www.gnu.org/licenses/agpl.txt.
<table class="full"> <table class="full">
<tr> <tr>
<td id="gui-search-source-label">Start:</td> <td id="gui-search-source-label">Start:</td>
<td><input id="input-source-name" class="input-box" type="text" maxlength="200" value="" title="Startposition eingeben" onchange="inputChanged(OSRM.C.SOURCE_LABEL);" /></td> <td><input id="input-source-name" class="input-box" type="text" maxlength="200" value="" title="Startposition eingeben" onchange="OSRM.Routing.inputChanged(OSRM.C.SOURCE_LABEL);" /></td>
<td class="right"><a class="button not-selectable" id="gui-search-source" onclick="showMarker('source')">Zeigen</a></td> <td class="right"><a class="button not-selectable" id="gui-search-source" onclick="OSRM.Routing.showMarker('source')">Zeigen</a></td>
</tr> </tr>
<tr> <tr>
<td id="gui-search-target-label">Ende:</td> <td id="gui-search-target-label">Ende:</td>
<td><input id="input-target-name" class="input-box" type="text" maxlength="200" value="" title="Zielposition eingeben" onchange="inputChanged(OSRM.C.TARGET_LABEL);" /></td> <td><input id="input-target-name" class="input-box" type="text" maxlength="200" value="" title="Zielposition eingeben" onchange="OSRM.Routing.inputChanged(OSRM.C.TARGET_LABEL);" /></td>
<td class="right"><a class="button not-selectable" id="gui-search-target" onclick="showMarker('target');">Zeigen</a></td> <td class="right"><a class="button not-selectable" id="gui-search-target" onclick="OSRM.Routing.showMarker('target');">Zeigen</a></td>
</tr> </tr>
</table> </table>
@ -103,8 +103,8 @@ or see http://www.gnu.org/licenses/agpl.txt.
<div class="vquad"></div> <div class="vquad"></div>
<table style="width:100%"> <table style="width:100%">
<tr> <tr>
<td> <a class="button not-selectable" id="gui-reset" onclick="resetRouting();">Reset</a></td> <td> <a class="button not-selectable" id="gui-reset" onclick="OSRM.Routing.resetRouting();">Reset</a></td>
<td class="right"> <a class="button not-selectable" id="gui-reverse" onclick="reverseRouting();">Umdrehen</a></td> <td class="right"> <a class="button not-selectable" id="gui-reverse" onclick="OSRM.Routing.reverseRouting();">Umdrehen</a></td>
</tr> </tr>
</table> </table>
@ -112,7 +112,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
<div class="vquad"></div> <div class="vquad"></div>
<div class="main-options not-selectable" id="options-toggle" onclick="OSRM.GUI.toggleOptions()">Options</div> <div class="main-options not-selectable" id="options-toggle" onclick="OSRM.GUI.toggleOptions()">Options</div>
<div class="main-options not-selectable" id="options-box"> <div class="main-options not-selectable" id="options-box">
<input type="checkbox" id="option-highlight-nonames" name="main-options" value="highlight-nonames" onclick="getRoute(OSRM.C.FULL_DESCRIPTION)" /><span id="gui-option-highlight-nonames-label">Unbenannte Straßen hervorheben</span> <input type="checkbox" id="option-highlight-nonames" name="main-options" value="highlight-nonames" onclick="OSRM.Routing.getRoute(OSRM.C.FULL_DESCRIPTION)" /><span id="gui-option-highlight-nonames-label">Unbenannte Straßen hervorheben</span>
</div> </div>
</div> </div>

View File

@ -30,7 +30,7 @@ function init() {
initLocale(); initLocale();
initGUI(); initGUI();
initMap(); initMap();
initRouting(); OSRM.Routing.init();
// check if the URL contains some GET parameter, e.g. for the route // check if the URL contains some GET parameter, e.g. for the route
checkURL(); checkURL();
@ -168,7 +168,7 @@ function initMap() {
OSRM.G.map.setView( position, OSRM.DEFAULTS.ZOOM_LEVEL); OSRM.G.map.setView( position, OSRM.DEFAULTS.ZOOM_LEVEL);
// map events // map events
OSRM.G.map.on('zoomend', function(e) { getRoute(OSRM.C.FULL_DESCRIPTION); }); OSRM.G.map.on('zoomend', function(e) { OSRM.Routing.getRoute(OSRM.C.FULL_DESCRIPTION); });
OSRM.G.map.on('contextmenu', function(e) {}); OSRM.G.map.on('contextmenu', function(e) {});
OSRM.G.map.on('click', function(e) { OSRM.G.map.on('click', function(e) {
if( !OSRM.G.markers.hasSource() ) { if( !OSRM.G.markers.hasSource() ) {
@ -176,13 +176,13 @@ function initMap() {
OSRM.Geocoder.updateAddress( OSRM.C.SOURCE_LABEL, OSRM.C.DO_FALLBACK_TO_LAT_LNG ); OSRM.Geocoder.updateAddress( OSRM.C.SOURCE_LABEL, OSRM.C.DO_FALLBACK_TO_LAT_LNG );
OSRM.G.markers.route[index].show(); OSRM.G.markers.route[index].show();
OSRM.G.markers.route[index].centerView( OSRM.G.map.getZoom() ); OSRM.G.markers.route[index].centerView( OSRM.G.map.getZoom() );
getRoute( OSRM.C.FULL_DESCRIPTION ); OSRM.Routing.getRoute( OSRM.C.FULL_DESCRIPTION );
} else if( !OSRM.G.markers.hasTarget() ) { } else if( !OSRM.G.markers.hasTarget() ) {
var index = OSRM.G.markers.setTarget( e.latlng ); var index = OSRM.G.markers.setTarget( e.latlng );
OSRM.Geocoder.updateAddress( OSRM.C.TARGET_LABEL, OSRM.C.DO_FALLBACK_TO_LAT_LNG ); OSRM.Geocoder.updateAddress( OSRM.C.TARGET_LABEL, OSRM.C.DO_FALLBACK_TO_LAT_LNG );
OSRM.G.markers.route[index].show(); OSRM.G.markers.route[index].show();
OSRM.G.markers.route[index].centerView( OSRM.G.map.getZoom() ); OSRM.G.markers.route[index].centerView( OSRM.G.map.getZoom() );
getRoute( OSRM.C.FULL_DESCRIPTION ); OSRM.Routing.getRoute( OSRM.C.FULL_DESCRIPTION );
} }
} ); } );
} }
@ -275,6 +275,6 @@ function checkURL(){
} }
// compute route // compute route
getRoute(OSRM.C.FULL_DESCRIPTION); OSRM.Routing.getRoute(OSRM.C.FULL_DESCRIPTION);
} }
} }

View File

@ -32,28 +32,30 @@ OSRM.GLOBALS.pending = false;
OSRM.GLOBALS.pendingTimer = null; OSRM.GLOBALS.pendingTimer = null;
OSRM.Routing = {
// init routing data structures // init routing data structures
function initRouting() { init: function() {
OSRM.G.route = new OSRM.Route(); OSRM.G.route = new OSRM.Route();
OSRM.G.markers = new OSRM.Markers(); OSRM.G.markers = new OSRM.Markers();
} },
// -- JSONP processing -- // -- JSONP processing --
// process JSONP response of routing server // process JSONP response of routing server
function timeoutRouteSimple() { timeoutRouteSimple: function() {
showNoRouteGeometry(); OSRM.Routing.showNoRouteGeometry();
showNoRouteDescription(); OSRM.Routing.showNoRouteDescription();
document.getElementById('information-box').innerHTML = "<br><p style='font-size:14px;font-weight:bold;text-align:center;'>"+OSRM.loc("TIMED_OUT")+".<p>"; document.getElementById('information-box').innerHTML = "<br><p style='font-size:14px;font-weight:bold;text-align:center;'>"+OSRM.loc("TIMED_OUT")+".<p>";
} },
function timeoutRoute() { timeoutRoute: function() {
showNoRouteGeometry(); OSRM.Routing.showNoRouteGeometry();
OSRM.G.route.hideUnnamedRoute(); OSRM.G.route.hideUnnamedRoute();
showNoRouteDescription(); OSRM.Routing.showNoRouteDescription();
document.getElementById('information-box').innerHTML = "<br><p style='font-size:14px;font-weight:bold;text-align:center;'>"+OSRM.loc("TIMED_OUT")+".<p>"; document.getElementById('information-box').innerHTML = "<br><p style='font-size:14px;font-weight:bold;text-align:center;'>"+OSRM.loc("TIMED_OUT")+".<p>";
} },
function showRouteSimple(response) { showRouteSimple: function(response) {
if(!response) if(!response)
return; return;
@ -61,88 +63,88 @@ function showRouteSimple(response) {
return; return;
if( response.status == 207) { if( response.status == 207) {
showNoRouteGeometry(); OSRM.Routing.showNoRouteGeometry();
showNoRouteDescription(); OSRM.Routing.showNoRouteDescription();
document.getElementById('information-box').innerHTML = "<br><p style='font-size:14px;font-weight:bold;text-align:center;'>"+OSRM.loc("YOUR_ROUTE_IS_BEING_COMPUTED")+".<p>"; document.getElementById('information-box').innerHTML = "<br><p style='font-size:14px;font-weight:bold;text-align:center;'>"+OSRM.loc("YOUR_ROUTE_IS_BEING_COMPUTED")+".<p>";
} else { } else {
showRouteGeometry(response); OSRM.Routing.showRouteGeometry(response);
showRouteDescriptionSimple(response); OSRM.Routing.showRouteDescriptionSimple(response);
} }
updateHints(response); OSRM.Routing.updateHints(response);
// // TODO: hack to process final drag event, if it was fenced, but we are still dragging (alternative approach) // // TODO: hack to process final drag event, if it was fenced, but we are still dragging (alternative approach)
// if(OSRM.G.pending) { // if(OSRM.G.pending) {
// clearTimeout(OSRM.G.pendingTimer); // clearTimeout(OSRM.G.pendingTimer);
// OSRM.G.pendingTimer = setTimeout(timeoutDrag,100); // OSRM.G.pendingTimer = setTimeout(OSRM.Routing.timeoutDrag,100);
// } // }
} },
function showRoute(response) { showRoute: function(response) {
if(!response) if(!response)
return; return;
if(response.status == 207) { if(response.status == 207) {
showNoRouteGeometry(); OSRM.Routing.showNoRouteGeometry();
OSRM.G.route.hideUnnamedRoute(); OSRM.G.route.hideUnnamedRoute();
showNoRouteDescription(); OSRM.Routing.showNoRouteDescription();
document.getElementById('information-box').innerHTML = "<br><p style='font-size:14px;font-weight:bold;text-align:center;'>"+OSRM.loc("NO_ROUTE_FOUND")+".<p>"; document.getElementById('information-box').innerHTML = "<br><p style='font-size:14px;font-weight:bold;text-align:center;'>"+OSRM.loc("NO_ROUTE_FOUND")+".<p>";
} else { } else {
showRouteGeometry(response); OSRM.Routing.showRouteGeometry(response);
showRouteNonames(response); OSRM.Routing.showRouteNonames(response);
showRouteDescription(response); OSRM.Routing.showRouteDescription(response);
snapRoute(); OSRM.Routing.snapRoute();
} }
updateHints(response); OSRM.Routing.updateHints(response);
} },
// show route geometry // show route geometry
function showNoRouteGeometry() { showNoRouteGeometry: function() {
var positions = []; var positions = [];
for(var i=0; i<OSRM.G.markers.route.length;i++) for(var i=0; i<OSRM.G.markers.route.length;i++)
positions.push( OSRM.G.markers.route[i].getPosition() ); positions.push( OSRM.G.markers.route[i].getPosition() );
OSRM.G.route.showRoute(positions, OSRM.Route.NOROUTE); OSRM.G.route.showRoute(positions, OSRM.Route.NOROUTE);
} },
function showRouteGeometry(response) { showRouteGeometry: function(response) {
OSRM.G.via_points = response.via_points.slice(0); OSRM.G.via_points = response.via_points.slice(0);
var geometry = decodeRouteGeometry(response.route_geometry, 5); var geometry = OSRM.Routing.decodeRouteGeometry(response.route_geometry, 5);
var points = []; var points = [];
for( var i=0; i < geometry.length; i++) { for( var i=0; i < geometry.length; i++) {
points.push( new L.LatLng(geometry[i][0], geometry[i][1]) ); points.push( new L.LatLng(geometry[i][0], geometry[i][1]) );
} }
OSRM.G.route.showRoute(points, OSRM.Route.ROUTE); OSRM.G.route.showRoute(points, OSRM.Route.ROUTE);
} },
// route description display (and helper functions) // route description display (and helper functions)
function onClickRouteDescription(geometry_index) { onClickRouteDescription: function(geometry_index) {
var positions = OSRM.G.route.getPositions(); var positions = OSRM.G.route.getPositions();
OSRM.G.markers.highlight.setPosition( positions[geometry_index] ); OSRM.G.markers.highlight.setPosition( positions[geometry_index] );
OSRM.G.markers.highlight.show(); OSRM.G.markers.highlight.show();
OSRM.G.markers.highlight.centerView(OSRM.DEFAULTS.HIGHLIGHT_ZOOM_LEVEL); OSRM.G.markers.highlight.centerView(OSRM.DEFAULTS.HIGHLIGHT_ZOOM_LEVEL);
} },
function onClickCreateShortcut(src){ onClickCreateShortcut: function(src){
src += '&z='+ OSRM.G.map.getZoom() + '&center=' + OSRM.G.map.getCenter().lat + ',' + OSRM.G.map.getCenter().lng; src += '&z='+ OSRM.G.map.getZoom() + '&center=' + OSRM.G.map.getCenter().lat + ',' + OSRM.G.map.getCenter().lng;
OSRM.JSONP.call(OSRM.DEFAULTS.HOST_SHORTENER_URL+src, showRouteLink, showRouteLink_TimeOut, 2000, 'shortener'); OSRM.JSONP.call(OSRM.DEFAULTS.HOST_SHORTENER_URL+src, OSRM.Routing.showRouteLink, OSRM.Routing.showRouteLink_TimeOut, 2000, 'shortener');
document.getElementById('route-prelink').innerHTML = '['+OSRM.loc("GENERATE_LINK_TO_ROUTE")+']'; document.getElementById('route-prelink').innerHTML = '['+OSRM.loc("GENERATE_LINK_TO_ROUTE")+']';
} },
function showRouteLink(response){ showRouteLink: function(response){
document.getElementById('route-prelink').innerHTML = '[<a id="gpx-link" class = "text-selectable" href="' +response.ShortURL+ '">'+response.ShortURL+'</a>]'; document.getElementById('route-prelink').innerHTML = '[<a id="gpx-link" class = "text-selectable" href="' +response.ShortURL+ '">'+response.ShortURL+'</a>]';
} },
function showRouteLink_TimeOut(){ showRouteLink_TimeOut: function(){
document.getElementById('route-prelink').innerHTML = '['+OSRM.loc("LINK_TO_ROUTE_TIMEOUT")+']'; document.getElementById('route-prelink').innerHTML = '['+OSRM.loc("LINK_TO_ROUTE_TIMEOUT")+']';
} },
function showRouteDescription(response) { showRouteDescription: function(response) {
// compute query string // compute query string
var query_string = '?rebuild=1'; var query_string = '?rebuild=1';
for(var i=0; i<OSRM.G.markers.route.length; i++) for(var i=0; i<OSRM.G.markers.route.length; i++)
query_string += '&loc=' + OSRM.G.markers.route[i].getLat() + ',' + OSRM.G.markers.route[i].getLng(); query_string += '&loc=' + OSRM.G.markers.route[i].getLat() + ',' + OSRM.G.markers.route[i].getLng();
// create link to the route // create link to the route
var route_link ='<span class="route-summary" id="route-prelink">[<a id="gpx-link" onclick="onClickCreateShortcut(\'' + OSRM.DEFAULTS.WEBSITE_URL + query_string + '\')">'+OSRM.loc("GET_LINK_TO_ROUTE")+'</a>]</span>'; var route_link ='<span class="route-summary" id="route-prelink">[<a id="gpx-link" onclick="OSRM.Routing.onClickCreateShortcut(\'' + OSRM.DEFAULTS.WEBSITE_URL + query_string + '\')">'+OSRM.loc("GET_LINK_TO_ROUTE")+'</a>]</span>';
// create GPX link // create GPX link
var gpx_link = '<span class="route-summary">[<a id="gpx-link" onClick="document.location.href=\'' + OSRM.DEFAULTS.HOST_ROUTING_URL + query_string + '&output=gpx\';">'+OSRM.loc("GPX_FILE")+'</a>]</span>'; var gpx_link = '<span class="route-summary">[<a id="gpx-link" onClick="document.location.href=\'' + OSRM.DEFAULTS.HOST_ROUTING_URL + query_string + '&output=gpx\';">'+OSRM.loc("GPX_FILE")+'</a>]</span>';
@ -159,11 +161,11 @@ function showRouteDescription(response) {
route_desc += '<tr class="'+rowstyle+'">'; route_desc += '<tr class="'+rowstyle+'">';
route_desc += '<td class="result-directions">'; route_desc += '<td class="result-directions">';
route_desc += '<img width="18px" src="images/'+getDirectionIcon(response.route_instructions[i][0])+'" alt="" />'; route_desc += '<img width="18px" src="images/'+OSRM.Routing.getDirectionIcon(response.route_instructions[i][0])+'" alt="" />';
route_desc += "</td>"; route_desc += "</td>";
route_desc += '<td class="result-items">'; route_desc += '<td class="result-items">';
route_desc += '<span class="result-item" onclick="onClickRouteDescription('+response.route_instructions[i][3]+')">'; route_desc += '<span class="result-item" onclick="OSRM.Routing.onClickRouteDescription('+response.route_instructions[i][3]+')">';
route_desc += response.route_instructions[i][0]; route_desc += response.route_instructions[i][0];
if( i == 0 ) if( i == 0 )
route_desc += ' ' + OSRM.loc( response.route_instructions[i][6] ); route_desc += ' ' + OSRM.loc( response.route_instructions[i][6] );
@ -200,8 +202,8 @@ function showRouteDescription(response) {
document.getElementById('information-box-headline').innerHTML = headline; document.getElementById('information-box-headline').innerHTML = headline;
document.getElementById('information-box').innerHTML = output; document.getElementById('information-box').innerHTML = output;
} },
function showRouteDescriptionSimple(response) { showRouteDescriptionSimple: function(response) {
headline = OSRM.loc("ROUTE_DESCRIPTION")+":<br>"; headline = OSRM.loc("ROUTE_DESCRIPTION")+":<br>";
headline += "<span class='route-summary'>" headline += "<span class='route-summary'>"
+ OSRM.loc("DISTANCE")+": " + OSRM.Utils.metersToDistance(response.route_summary.total_distance) + OSRM.loc("DISTANCE")+": " + OSRM.Utils.metersToDistance(response.route_summary.total_distance)
@ -212,8 +214,8 @@ function showRouteDescriptionSimple(response) {
document.getElementById('information-box-headline').innerHTML = headline; document.getElementById('information-box-headline').innerHTML = headline;
document.getElementById('information-box').innerHTML = "<br><p style='font-size:14px;font-weight:bold;text-align:center;'>"+OSRM.loc("YOUR_ROUTE_IS_BEING_COMPUTED")+".<p>"; document.getElementById('information-box').innerHTML = "<br><p style='font-size:14px;font-weight:bold;text-align:center;'>"+OSRM.loc("YOUR_ROUTE_IS_BEING_COMPUTED")+".<p>";
} },
function showNoRouteDescription() { showNoRouteDescription: function() {
headline = OSRM.loc("ROUTE_DESCRIPTION")+":<br>"; headline = OSRM.loc("ROUTE_DESCRIPTION")+":<br>";
headline += "<span class='route-summary'>" headline += "<span class='route-summary'>"
+ OSRM.loc("DISTANCE")+": N/A" + OSRM.loc("DISTANCE")+": N/A"
@ -224,11 +226,11 @@ function showNoRouteDescription() {
document.getElementById('information-box-headline').innerHTML = headline; document.getElementById('information-box-headline').innerHTML = headline;
document.getElementById('information-box').innerHTML = "<br><p style='font-size:14px;font-weight:bold;text-align:center;'>"+OSRM.loc("YOUR_ROUTE_IS_BEING_COMPUTED")+".<p>"; document.getElementById('information-box').innerHTML = "<br><p style='font-size:14px;font-weight:bold;text-align:center;'>"+OSRM.loc("YOUR_ROUTE_IS_BEING_COMPUTED")+".<p>";
} },
// unnamed streets display // unnamed streets display
function showRouteNonames(response) { showRouteNonames: function(response) {
// do not display unnamed streets? // do not display unnamed streets?
if( document.getElementById('option-highlight-nonames').checked == false) { if( document.getElementById('option-highlight-nonames').checked == false) {
OSRM.G.route.hideUnnamedRoute(); OSRM.G.route.hideUnnamedRoute();
@ -245,7 +247,7 @@ function showRouteNonames(response) {
} }
// aggregate geometry for unnamed streets // aggregate geometry for unnamed streets
var geometry = decodeRouteGeometry(response.route_geometry, 5); var geometry = OSRM.Routing.decodeRouteGeometry(response.route_geometry, 5);
var is_named = true; var is_named = true;
var current_positions = []; var current_positions = [];
var all_positions = []; var all_positions = [];
@ -266,13 +268,13 @@ function showRouteNonames(response) {
// display unnamed streets // display unnamed streets
OSRM.G.route.showUnnamedRoute(all_positions); OSRM.G.route.showUnnamedRoute(all_positions);
} },
//-- main function -- //-- main function --
// generate server calls to query routes // generate server calls to query routes
function getRoute(do_description) { getRoute: function(do_description) {
// if source or target are not set -> hide route // if source or target are not set -> hide route
if( OSRM.G.markers.route.length < 2 ) { if( OSRM.G.markers.route.length < 2 ) {
@ -297,13 +299,13 @@ function getRoute(do_description) {
// decide whether it is a dragging call or a normal one // decide whether it is a dragging call or a normal one
if (do_description) { if (do_description) {
callback = showRoute; callback = OSRM.Routing.showRoute;
timeout = timeoutRoute; timeout = OSRM.Routing.timeoutRoute;
source +='&instructions=true'; source +='&instructions=true';
type = 'route'; type = 'route';
} else { } else {
callback = showRouteSimple; callback = OSRM.Routing.showRouteSimple;
timeout = timeoutRouteSimple; timeout = OSRM.Routing.timeoutRouteSimple;
source +='&instructions=false'; source +='&instructions=false';
type = 'dragging'; type = 'dragging';
} }
@ -314,7 +316,7 @@ function getRoute(do_description) {
// TODO: hack to process final drag event, if it was fenced, but we are still dragging // TODO: hack to process final drag event, if it was fenced, but we are still dragging
if(called == false && !do_description) { if(called == false && !do_description) {
clearTimeout(OSRM.G.pendingTimer); clearTimeout(OSRM.G.pendingTimer);
OSRM.G.pendingTimer = setTimeout(timeoutDrag,OSRM.DEFAULTS.JSONP_TIMEOUT); OSRM.G.pendingTimer = setTimeout(OSRM.Routing.timeoutDrag,OSRM.DEFAULTS.JSONP_TIMEOUT);
} }
else { else {
clearTimeout(OSRM.G.pendingTimer); clearTimeout(OSRM.G.pendingTimer);
@ -326,17 +328,17 @@ function getRoute(do_description) {
// clearTimeout(OSRM.G.pendingTimer); // clearTimeout(OSRM.G.pendingTimer);
// OSRM.G.pending = false; // OSRM.G.pending = false;
// } // }
} },
function timeoutDrag() { timeoutDrag: function() {
OSRM.G.markers.route[OSRM.G.dragid].hint = null; OSRM.G.markers.route[OSRM.G.dragid].hint = null;
getRoute(OSRM.C.NO_DESCRIPTION); OSRM.Routing.getRoute(OSRM.C.NO_DESCRIPTION);
} },
//-- helper functions -- //-- helper functions --
//decode compressed route geometry //decode compressed route geometry
function decodeRouteGeometry(encoded, precision) { decodeRouteGeometry: function(encoded, precision) {
precision = Math.pow(10, -precision); precision = Math.pow(10, -precision);
var len = encoded.length, index=0, lat=0, lng = 0, array = []; var len = encoded.length, index=0, lat=0, lng = 0, array = [];
while (index < len) { while (index < len) {
@ -360,18 +362,18 @@ function decodeRouteGeometry(encoded, precision) {
array.push([lat * precision, lng * precision]); array.push([lat * precision, lng * precision]);
} }
return array; return array;
} },
// update hints of all markers // update hints of all markers
function updateHints(response) { updateHints: function(response) {
var hint_locations = response.hint_data.locations; var hint_locations = response.hint_data.locations;
OSRM.G.markers.checksum = response.hint_data.checksum; OSRM.G.markers.checksum = response.hint_data.checksum;
for(var i=0; i<hint_locations.length; i++) for(var i=0; i<hint_locations.length; i++)
OSRM.G.markers.route[i].hint = hint_locations[i]; OSRM.G.markers.route[i].hint = hint_locations[i];
} },
// snap all markers to the received route // snap all markers to the received route
function snapRoute() { snapRoute: function() {
var positions = OSRM.G.route.getPositions(); var positions = OSRM.G.route.getPositions();
OSRM.G.markers.route[0].setPosition( positions[0] ); OSRM.G.markers.route[0].setPosition( positions[0] );
@ -381,11 +383,11 @@ function snapRoute() {
OSRM.Geocoder.updateAddress(OSRM.C.SOURCE_LABEL); OSRM.Geocoder.updateAddress(OSRM.C.SOURCE_LABEL);
OSRM.Geocoder.updateAddress(OSRM.C.TARGET_LABEL); OSRM.Geocoder.updateAddress(OSRM.C.TARGET_LABEL);
} },
// map driving instructions to icons // map driving instructions to icons
// [TODO: better implementation, language-safe] // [TODO: better implementation, language-safe]
function getDirectionIcon(name) { getDirectionIcon: function(name) {
var directions = { var directions = {
"Turn left":"turn-left.png", "Turn left":"turn-left.png",
"Turn right":"turn-right.png", "Turn right":"turn-right.png",
@ -414,13 +416,13 @@ function getDirectionIcon(name) {
return directions[name]; return directions[name];
else else
return "default.png"; return "default.png";
} },
// -- gui functions -- // -- gui functions --
// click: button "reset" // click: button "reset"
function resetRouting() { resetRouting: function() {
document.getElementById('input-source-name').value = ""; document.getElementById('input-source-name').value = "";
document.getElementById('input-target-name').value = ""; document.getElementById('input-target-name').value = "";
@ -432,10 +434,10 @@ function resetRouting() {
document.getElementById('information-box-headline').innerHTML = ""; document.getElementById('information-box-headline').innerHTML = "";
OSRM.JSONP.reset(); OSRM.JSONP.reset();
} },
// click: button "reverse" // click: button "reverse"
function reverseRouting() { reverseRouting: function() {
// invert input boxes // invert input boxes
var tmp = document.getElementById("input-source-name").value; var tmp = document.getElementById("input-source-name").value;
document.getElementById("input-source-name").value = document.getElementById("input-target-name").value; document.getElementById("input-source-name").value = document.getElementById("input-target-name").value;
@ -461,16 +463,16 @@ function reverseRouting() {
// recompute route // recompute route
if( OSRM.G.route.isShown() ) { if( OSRM.G.route.isShown() ) {
getRoute(OSRM.C.FULL_DESCRIPTION); OSRM.Routing.getRoute(OSRM.C.FULL_DESCRIPTION);
OSRM.G.markers.highlight.hide(); OSRM.G.markers.highlight.hide();
} else { } else {
document.getElementById('information-box').innerHTML = ""; document.getElementById('information-box').innerHTML = "";
document.getElementById('information-box-headline').innerHTML = ""; document.getElementById('information-box-headline').innerHTML = "";
} }
} },
// click: button "show" // click: button "show"
function showMarker(marker_id) { showMarker: function(marker_id) {
if( OSRM.JSONP.fences["geocoder_source"] || OSRM.JSONP.fences["geocoder_target"] ) if( OSRM.JSONP.fences["geocoder_source"] || OSRM.JSONP.fences["geocoder_target"] )
return; return;
@ -478,13 +480,15 @@ function showMarker(marker_id) {
OSRM.G.markers.route[0].centerView(); OSRM.G.markers.route[0].centerView();
else if( marker_id == OSRM.C.TARGET_LABEL && OSRM.G.markers.hasTarget() ) else if( marker_id == OSRM.C.TARGET_LABEL && OSRM.G.markers.hasTarget() )
OSRM.G.markers.route[OSRM.G.markers.route.length-1].centerView(); OSRM.G.markers.route[OSRM.G.markers.route.length-1].centerView();
} },
// changed: any inputbox (is called when return is pressed [after] or focus is lost [before]) // changed: any inputbox (is called when return is pressed [after] or focus is lost [before])
function inputChanged(marker_id) { inputChanged: function(marker_id) {
if( marker_id == OSRM.C.SOURCE_LABEL) if( marker_id == OSRM.C.SOURCE_LABEL)
OSRM.Geocoder.call(OSRM.C.SOURCE_LABEL, document.getElementById('input-source-name').value); OSRM.Geocoder.call(OSRM.C.SOURCE_LABEL, document.getElementById('input-source-name').value);
else if( marker_id == OSRM.C.TARGET_LABEL) else if( marker_id == OSRM.C.TARGET_LABEL)
OSRM.Geocoder.call(OSRM.C.TARGET_LABEL, document.getElementById('input-target-name').value); OSRM.Geocoder.call(OSRM.C.TARGET_LABEL, document.getElementById('input-target-name').value);
} }
};