Start work on second engine
authorRichard Fairhurst <richard@systemeD.net>
Tue, 21 Jan 2014 23:47:50 +0000 (23:47 +0000)
committerRichard Fairhurst <richard@systemeD.net>
Tue, 21 Jan 2014 23:47:50 +0000 (23:47 +0000)
app/assets/javascripts/routing.js.erb
app/views/layouts/_search.html.erb

index 98f6d86e87640ba1756c80d9421303c757c8f62d..4eb91fc7aaeb826be74cc6df777d8c3a9ccbe2e2 100644 (file)
@@ -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<points.length; i++) {
+                               p.push(points[i][0]);
+                               p.push(points[i][1]);
+                       }
+                       url+=p.join(',');
+                       url+="/foot.js";
+                       this.requestJSONP(url+"?callback=");
+               },
+               gotRoute: function(data) {
+                       console.log(data);
+                       // *** todo
+                       // *** will require some degree of refactoring because instruction text is pre-assembled
+                       // *** otherwise largely like OSRM (funny that)
+               }
+       });
+       
+       // *** add MapQuest
+       // *** add YOURS
+       // *** move into separate files
+       
+       r.chosenEngine=r.engines[0];
        return r;
 };
index 247798bf20db3f01a6bb5f7e73481262403d3f0f..bf734fce28e0203b8974ac38f13ea8e65ce705ee 100644 (file)
@@ -17,7 +17,7 @@
   <div class='query_wrapper routing'>
     <%= text_field_tag "route_from", params[:from], :placeholder => "From", :onchange=>"OSM.routing.geocode('route_from',event)" %>
     <%= text_field_tag "route_to"  , params[:to]  , :placeholder => "To"  , :onchange=>"OSM.routing.geocode('route_to'  ,event)" %>
-    <select class='routing_engines'></select>
+    <select class='routing_engines' name='routing_engines' onchange="OSM.routing.selectEngine(event)"></select>
   </div>
 
 <% end %>