diff --git a/WebContent/OSRM.Localization.js b/WebContent/OSRM.Localization.js
index 2e08c1c76..8d95896a8 100644
--- a/WebContent/OSRM.Localization.js
+++ b/WebContent/OSRM.Localization.js
@@ -65,7 +65,16 @@ OSRM.Localization["de"] = {
"DISTANCE": "Distanz",
"DURATION": "Dauer",
"YOUR_ROUTE_IS_BEING_COMPUTED": "Ihre Route wird berechnet",
-"NO_ROUTE_FOUND": "Keine Route hierher möglich"
+"NO_ROUTE_FOUND": "Keine Route hierher möglich",
+// directions
+"N": "Norden",
+"O": "Ost",
+"S": "Süden",
+"W": "Westen",
+"NO": "Nordost",
+"SO": "Südost",
+"SW": "Südwest",
+"NW": "Nordwest"
};
@@ -98,5 +107,14 @@ OSRM.Localization["en"] = {
"DISTANCE": "Distance",
"DURATION": "Duration",
"YOUR_ROUTE_IS_BEING_COMPUTED": "Your route is being computed",
-"NO_ROUTE_FOUND": "No route possible"
+"NO_ROUTE_FOUND": "No route possible",
+// directions
+"N": "north",
+"E": "east",
+"S": "south",
+"W": "west",
+"NE": "northeast",
+"SE": "southeast",
+"SW": "southwest",
+"NW": "northwest"
};
\ No newline at end of file
diff --git a/WebContent/OSRM.Markers.js b/WebContent/OSRM.Markers.js
index 500284eee..96bb97f3d 100644
--- a/WebContent/OSRM.Markers.js
+++ b/WebContent/OSRM.Markers.js
@@ -26,6 +26,7 @@ OSRM.Marker = function( label, style, position ) {
this.marker = new L.MouseMarker( this.position, style );
this.marker.parent = this;
+ this.dirty = true;
this.shown = false;
this.hint = undefined;
@@ -106,6 +107,7 @@ onClick: function(e) {
my_markers.highlight.hide();
},
onDrag: function(e) {
+ this.parent.dirty = true;
this.parent.setPosition( e.target.getLatLng() );
if(OSRM.dragging == true) // TODO: hack that deals with drag events after dragend event
getRoute(OSRM.NO_DESCRIPTION);
diff --git a/WebContent/OSRM.Route.js b/WebContent/OSRM.Route.js
index 587b8379b..6c7db4395 100644
--- a/WebContent/OSRM.Route.js
+++ b/WebContent/OSRM.Route.js
@@ -135,6 +135,12 @@ OSRM.extend( OSRM.Route,{
this._current_route.hide();
this._unnamed_route.hide();
},
+ hideAll: function() {
+ this._current_route.hide();
+ this._unnamed_route.hide();
+ this._old_route.hide();
+ this._noroute = OSRM.Route.ROUTE;
+ },
showUnnamedRoute: function(positions) {
this._unnamed_route.clearRoutes();
diff --git a/WebContent/geocoder.js b/WebContent/geocoder.js
index 6b08907b5..835b4ba67 100644
--- a/WebContent/geocoder.js
+++ b/WebContent/geocoder.js
@@ -27,9 +27,9 @@ OSRM.TARGET_MARKER_LABEL = "target";
// update geo coordinates in input boxes
function updateLocation(marker_id) {
- if (marker_id == OSRM.SOURCE_MARKER_LABEL) {
+ if (marker_id == OSRM.SOURCE_MARKER_LABEL && my_markers.route[0].dirty == true ) {
document.getElementById("input-source-name").value = my_markers.route[0].getPosition().lat.toFixed(6) + ", " + my_markers.route[0].getPosition().lng.toFixed(6);
- } else if (marker_id == OSRM.TARGET_MARKER_LABEL) {
+ } else if (marker_id == OSRM.TARGET_MARKER_LABEL && my_markers.route[my_markers.route.length-1].dirty == true) {
document.getElementById("input-target-name").value = my_markers.route[my_markers.route.length-1].getPosition().lat.toFixed(6) + ", " + my_markers.route[my_markers.route.length-1].getPosition().lng.toFixed(6);
}
}
@@ -40,8 +40,7 @@ function callGeocoder(marker_id, query) {
//geo coordinates given -> go directly to drawing results
if(query.match(/^\s*[-+]?[0-9]*\.?[0-9]+\s*[,;]\s*[-+]?[0-9]*\.?[0-9]+\s*$/)){
var coord = query.split(/[,;]/);
- onclickGeocoderResult(marker_id, coord[0], coord[1]);
-// updateReverseGeocoder(marker_id);
+ onclickGeocoderResult(marker_id, coord[0], coord[1], true);
return;
}
@@ -57,15 +56,20 @@ function callGeocoder(marker_id, query) {
// helper function for clicks on geocoder search results
-function onclickGeocoderResult(marker_id, lat, lon) {
+function onclickGeocoderResult(marker_id, lat, lon, do_reverse_geocode ) {
var index;
if( marker_id == OSRM.SOURCE_MARKER_LABEL )
index = my_markers.setSource( new L.LatLng(lat, lon) );
else if( marker_id == OSRM.TARGET_MARKER_LABEL )
index = my_markers.setTarget( new L.LatLng(lat, lon) );
else
- index = -1; // search via positions not yet implemented
+ index = -1; // via nodes not yet implemented
+ if( do_reverse_geocode == true )
+ updateReverseGeocoder(marker_id);
+ else
+ my_markers.route[index].dirty = false;
+
my_markers.route[index].show();
my_markers.route[index].centerView();
getRoute(OSRM.FULL_DESCRIPTION);
@@ -81,7 +85,7 @@ function showGeocoderResults(marker_id, response) {
showGeocoderResults_Empty(marker_id);
return;
}
-
+
var html = "";
html += '
';
for(var i=0; i < response.length; i++){
@@ -123,72 +127,60 @@ function showGeocoderResults_Timeout() {
}
-// - [upcoming feature: reverse geocoding] -
-//OSRM.REVERSE_GEOCODE_POST = 'http://nominatim.openstreetmap.org/reverse?format=json';
-//
-//function updateReverseGeocoder(marker_id) {
-// if (marker_id == OSRM.SOURCE_MARKER_LABEL) {
-// document.getElementById("input-source-name").value = my_markers.route[0].getPosition().lat.toFixed(6) + ", " + my_markers.route[0].getPosition().lng.toFixed(6);
-// callReverseGeocoder("source", my_markers.route[0].getPosition().lat, my_markers.route[0].getPosition().lng);
-// } else if (marker_id == OSRM.TARGET_MARKER_LABEL) {
-// document.getElementById("input-target-name").value = my_markers.route[my_markers.route.length-1].getPosition().lat.toFixed(6) + ", " + my_markers.route[my_markers.route.length-1].getPosition().lng.toFixed(6);
-// callReverseGeocoder("target", my_markers.route[my_markers.route.length-1].getPosition().lat, my_markers.route[my_markers.route.length-1].getPosition().lng);
-// }
-//}
-//function updateLocations() {
-// if( my_markers.route[0] && my_markers.route[0].label == OSRM.SOURCE_MARKER_LABEL) {
-// document.getElementById("input-source-name").value = my_markers.route[0].getPosition().lat.toFixed(6) + ", " + my_markers.route[0].getPosition().lng.toFixed(6);
-// callReverseGeocoder("source", my_markers.route[0].getPosition().lat, my_markers.route[0].getPosition().lng);
-// //OSRM.debug.log("[call1] reverse geocoder");
-// }
-//
-// if( my_markers.route[my_markers.route.length-1] && my_markers.route[ my_markers.route.length-1 ].label == OSRM.TARGET_MARKER_LABEL) {
-// document.getElementById("input-target-name").value = my_markers.route[my_markers.route.length-1].getPosition().lat.toFixed(6) + ", " + my_markers.route[my_markers.route.length-1].getPosition().lng.toFixed(6);
-// callReverseGeocoder("target", my_markers.route[my_markers.route.length-1].getPosition().lat, my_markers.route[my_markers.route.length-1].getPosition().lng);
-// }
-//}
-//
-//
-//function timeout_ReverseGeocoder() {
-// //OSRM.debug.log("[timeout] reverse geocoder");
-//}
-//
-////prepare request and call reverse geocoder
-//function callReverseGeocoder(marker_id, lat, lon) {
-// //build request
-// if (marker_id == OSRM.SOURCE_MARKER_LABEL) {
-// var src= OSRM.REVERSE_GEOCODE_POST + "&lat=" + lat + "&lon=" + lon;
-// OSRM.JSONP.call( src, showReverseGeocoderResults_Source, timeout_ReverseGeocoder, OSRM.DEFAULTS.JSONP_TIMEOUT, "reverse_geocoder_source" );
-// //OSRM.debug.log("[call2] reverse geocoder");
-// } else if (marker_id == OSRM.TARGET_MARKER_LABEL) {
-// var src = OSRM.REVERSE_GEOCODE_POST + "&lat=" + lat + "&lon=" + lon;
-// OSRM.JSONP.call( src, showReverseGeocoderResults_Target, timeout_ReverseGeocoder, OSRM.DEFAULTS.JSONP_TIMEOUT, "reverse_geocoder_target" );
-// }
-//}
-////processing JSONP response of reverse geocoder
-////(with wrapper functions for source/target jsonp)
-//function showReverseGeocoderResults_Source(response) { showReverseGeocoderResults(OSRM.SOURCE_MARKER_LABEL, response); }
-//function showReverseGeocoderResults_Target(response) { showReverseGeocoderResults(OSRM.TARGET_MARKER_LABEL, response); }
-//function showReverseGeocoderResults(marker_id, response) {
-// //OSRM.debug.log("[inner] reverse geocoder");
-// if(response){
-// if(response.address == undefined)
-// return;
-//
-// var address = "";
-// if( response.address.road)
-// address += response.address.road;
-// if( response.address.city) {
-// if( response.address.road)
-// address += ", ";
-// address += response.address.city;
-// }
-// if( address == "" )
-// return;
-//
-// if(marker_id == OSRM.SOURCE_MARKER_LABEL)
-// document.getElementById("input-source-name").value = address;
-// else if(marker_id == OSRM.TARGET_MARKER_LABEL)
-// document.getElementById("input-target-name").value = address;
-// }
-//}
+// - [upcoming feature: reverse geocoding (untested) ] -
+OSRM.REVERSE_GEOCODE_POST = 'http://nominatim.openstreetmap.org/reverse?format=json';
+
+//update reverse geocoder informatiopn in input boxes
+function updateReverseGeocoder(marker_id) {
+ if (marker_id == OSRM.SOURCE_MARKER_LABEL && my_markers.route[0].dirty == true ) {
+ document.getElementById("input-source-name").value = my_markers.route[0].getPosition().lat.toFixed(6) + ", " + my_markers.route[0].getPosition().lng.toFixed(6);
+ callReverseGeocoder("source", my_markers.route[0].getPosition().lat, my_markers.route[0].getPosition().lng);
+ } else if (marker_id == OSRM.TARGET_MARKER_LABEL && my_markers.route[my_markers.route.length-1].dirty == true) {
+ document.getElementById("input-target-name").value = my_markers.route[my_markers.route.length-1].getPosition().lat.toFixed(6) + ", " + my_markers.route[my_markers.route.length-1].getPosition().lng.toFixed(6);
+ callReverseGeocoder("target", my_markers.route[my_markers.route.length-1].getPosition().lat, my_markers.route[my_markers.route.length-1].getPosition().lng);
+ }
+}
+
+//prepare request and call reverse geocoder
+function callReverseGeocoder(marker_id, lat, lon) {
+ //build request
+ if (marker_id == OSRM.SOURCE_MARKER_LABEL) {
+ var src= OSRM.REVERSE_GEOCODE_POST + "&lat=" + lat + "&lon=" + lon;
+ OSRM.JSONP.call( src, showReverseGeocoderResults_Source, showReverseGeocoderResults_Timeout, OSRM.DEFAULTS.JSONP_TIMEOUT, "reverse_geocoder_source" );
+ } else if (marker_id == OSRM.TARGET_MARKER_LABEL) {
+ var src = OSRM.REVERSE_GEOCODE_POST + "&lat=" + lat + "&lon=" + lon;
+ OSRM.JSONP.call( src, showReverseGeocoderResults_Target, showReverseGeocoderResults_Timeout, OSRM.DEFAULTS.JSONP_TIMEOUT, "reverse_geocoder_target" );
+ }
+}
+//processing JSONP response of reverse geocoder
+//(with wrapper functions for source/target jsonp)
+function showReverseGeocoderResults_Timeout() {}
+function showReverseGeocoderResults_Source(response) { showReverseGeocoderResults(OSRM.SOURCE_MARKER_LABEL, response); }
+function showReverseGeocoderResults_Target(response) { showReverseGeocoderResults(OSRM.TARGET_MARKER_LABEL, response); }
+function showReverseGeocoderResults(marker_id, response) {
+ //OSRM.debug.log("[inner] reverse geocoder");
+ if(response){
+ if(response.address == undefined)
+ return;
+
+ var address = "";
+ if( response.address.road)
+ address += response.address.road;
+ if( response.address.city) {
+ if( response.address.road)
+ address += ", ";
+ address += response.address.city;
+ }
+ if( address == "" )
+ return;
+
+ if(marker_id == OSRM.SOURCE_MARKER_LABEL) {
+ document.getElementById("input-source-name").value = address;
+ my_markers.route[0].dirty = false;
+ } else if(marker_id == OSRM.TARGET_MARKER_LABEL) {
+ document.getElementById("input-target-name").value = address;
+ my_markers.route[my_markers.route.length-1].dirty = false;
+ }
+
+ }
+}
diff --git a/WebContent/main.css b/WebContent/main.css
index eaf6fba2a..dfb7a8d72 100644
--- a/WebContent/main.css
+++ b/WebContent/main.css
@@ -260,6 +260,16 @@ html, body, #map {
padding-top:1px;
padding-bottom:1px;
}
+.result-distance
+{
+ text-align:right;
+ vertical-align: middle;
+ width:30px;
+ padding-left:1px;
+ padding-right:1px;
+ padding-top:1px;
+ padding-bottom:1px;
+}
.result-item
{
cursor:pointer;
diff --git a/WebContent/main.js b/WebContent/main.js
index 8ecc709d1..127641c5d 100644
--- a/WebContent/main.js
+++ b/WebContent/main.js
@@ -157,7 +157,7 @@ function initMap() {
my_markers.route[index].centerView(false);
getRoute(OSRM.FULL_DESCRIPTION);
updateLocation("source");
-// updateReverseGeocoder("source");
+ updateReverseGeocoder("source");
}
else if( !my_markers.route[my_markers.route.length-1] || my_markers.route[ my_markers.route.length-1 ].label != OSRM.TARGET_MARKER_LABEL) {
index = my_markers.setTarget( e.latlng );
@@ -165,7 +165,7 @@ function initMap() {
my_markers.route[index].centerView(false);
getRoute(OSRM.FULL_DESCRIPTION);
updateLocation("target");
-// updateReverseGeocoder("target");
+ updateReverseGeocoder("target");
}
} );
}
diff --git a/WebContent/routing.js b/WebContent/routing.js
index e7c1f9727..cd430a8bd 100644
--- a/WebContent/routing.js
+++ b/WebContent/routing.js
@@ -126,10 +126,11 @@ function onClickCreateShortcut(src){
OSRM.JSONP.call(OSRM.DEFAULTS.HOST_SHORTENER_URL+src+'&jsonp=showRouteLink', showRouteLink, showRouteLink_TimeOut, 2000, 'shortener');
}
function showRouteLink(response){
- document.getElementById('route-link').innerHTML = '['+OSRM.loc("LINK_TO_ROUTE")+']';
+ document.getElementById('route-prelink').innerHTML = '['+response.ShortURL+']';
+ //document.getElementById('route-prelink').innerHTML = '['+OSRM.loc("LINK_TO_ROUTE")+']';
}
function showRouteLink_TimeOut(){
- document.getElementById('route-link').innerHTML = '['+OSRM.loc("LINK_TO_ROUTE_TIMEOUT")+']';
+ document.getElementById('route-prelink').innerHTML = '['+OSRM.loc("LINK_TO_ROUTE_TIMEOUT")+']';
}
function showRouteDescription(response) {
// compute query string
@@ -138,8 +139,8 @@ function showRouteDescription(response) {
query_string += '&loc=' + my_markers.route[i].getLat() + ',' + my_markers.route[i].getLng();
// create link to the route
- var route_link ='['+OSRM.loc("GET_LINK")+']';
- //var route_link ='['+OSRM.loc("GET_LINK")+']';
+ var route_link ='['+OSRM.loc("GET_LINK")+']';
+ //var route_link ='['+OSRM.loc("GET_LINK")+']';
// create GPX link
var gpx_link = '['+OSRM.loc("GPX_FILE")+']';
@@ -160,28 +161,36 @@ function showRouteDescription(response) {
route_desc += "";
route_desc += '';
- 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 += '';
+ route_desc += response.route_instructions[i][0];
+ if( i == 0 )
+ route_desc += ' ' + OSRM.loc( response.route_instructions[i][6] );
+ if( response.route_instructions[i][1] != "" ) {
+ route_desc += ' on ';
+ route_desc += '' + response.route_instructions[i][1] + '';
+ }
+ //route_desc += ' for ';
+ route_desc += '';
+ route_desc += " | ";
+
+ route_desc += '';
+ route_desc += ''+getDistanceWithUnit(response.route_instructions[i][2])+'';
route_desc += " | ";
route_desc += "";
- }
+ }
route_desc += '
';
headline = "";
headline += OSRM.loc("ROUTE_DESCRIPTION")+":
";
- headline += '';
+ 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+'
';
+ headline += '
'+route_link+'
'+gpx_link+'
';
var output = "";
output += route_desc;
@@ -408,7 +417,7 @@ function getDirectionIcon(name) {
// click: button "route"
function startRouting() {
- my_route.hideRoute();
+ my_route.hideAll();
my_markers.removeAll();
my_markers.highlight.hide();
@@ -426,7 +435,7 @@ function resetRouting() {
document.getElementById('input-source-name').value = "";
document.getElementById('input-target-name').value = "";
- my_route.hideRoute();
+ my_route.hideAll();
my_markers.removeAll();
my_markers.highlight.hide();
diff --git a/WebContent/utils.js b/WebContent/utils.js
index b45f9be62..405cb1377 100644
--- a/WebContent/utils.js
+++ b/WebContent/utils.js
@@ -36,18 +36,18 @@ function secondsToTime(seconds){
hours = parseInt(minutes/60);
minutes = minutes%60;
if(hours==0){
- return minutes+' min';
+ return minutes + ' ' + 'min';
}
else{
- return hours+' h '+minutes+' min';
+ return hours + ' ' + 'h' + ' ' + minutes + ' ' + 'min';
}
}
// human readable distance
function getDistanceWithUnit(distance){
distance = parseInt(distance);
- if(distance >= 1000){ return (parseInt(distance/1000))+' km'; }
- else{ return distance+' m'; }
+ if(distance >= 1000){ return (parseInt(distance/1000))+' ' + 'km'; }
+ else{ return distance+' ' + 'm'; }
}
// ------------------------------------------------------