From 40ad8c7def36c7f5658e9987075578f491f77f0b Mon Sep 17 00:00:00 2001 From: Richard Fairhurst Date: Tue, 21 Jan 2014 23:47:50 +0000 Subject: [PATCH] Start work on second engine --- app/assets/javascripts/routing.js.erb | 42 ++++++++++++++++++++++++--- app/views/layouts/_search.html.erb | 2 +- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/routing.js.erb b/app/assets/javascripts/routing.js.erb index 98f6d86e8..4eb91fc7a 100644 --- a/app/assets/javascripts/routing.js.erb +++ b/app/assets/javascripts/routing.js.erb @@ -49,6 +49,7 @@ OSM.Routing=function(map,name,jqSearch) { r.route_to=null; r.viaPoints=[]; r.polyline=null; + r.chosenEngine=null; // Geocoding @@ -76,10 +77,12 @@ OSM.Routing=function(map,name,jqSearch) { // Route-fetching UI + r.selectEngine=function(e) { + r.chosenEngine=r.engines[e.target.selectedIndex]; + }; r.requestRoute=function() { if (r.route_from && r.route_to) { - var chosen=jqSearch.find('select.routing_engines :selected').val(); - r.engines[chosen].getRoute(true,[r.route_from,r.route_to]); + r.chosenEngine.getRoute(true,[r.route_from,r.route_to]); // then, when the route has been fetched, it'll call the engine's gotRoute function } }; @@ -157,7 +160,7 @@ OSM.Routing=function(map,name,jqSearch) { // Add generic JSONP function engine.requestJSONP=function(url) { var script = document.createElement('script'); - script.src = url+"&jsonp="+r.name+".engine"+this.subscript+".gotRoute"; + script.src = url+r.name+".engine"+this.subscript+".gotRoute"; // OSRM doesn't like non-alphanumeric, otherwise we could just do OSM.routing.engines["+engine.subscript+"].gotRoute document.body.appendChild(script); }; @@ -183,7 +186,7 @@ OSM.Routing=function(map,name,jqSearch) { if (this._hints[pair]) url+= "&hint="+this._hints[pair]; } if (final) url+="&instructions=true"; - this.requestJSONP(url); + this.requestJSONP(url+"&jsonp="); }, gotRoute: function(data) { if (data.status==207) { @@ -198,5 +201,36 @@ OSM.Routing=function(map,name,jqSearch) { } }); + // CloudMade foot engine + // *** again, this should be shared from a Cloudmade library somewhere + // *** this API key is taken from some example code, not for real live use! + + r.addEngine({ + name: 'Foot (CloudMade)', + draggable: true, + getRoute: function(final,points) { + var url="http://routes.cloudmade.com/8ee2a50541944fb9bcedded5165f09d9/api/0.3/"; + var p=[]; + for (var i=0; i "From", :onchange=>"OSM.routing.geocode('route_from',event)" %> <%= text_field_tag "route_to" , params[:to] , :placeholder => "To" , :onchange=>"OSM.routing.geocode('route_to' ,event)" %> - + <% end %> -- 2.43.2