Parse MapQuest directions
authorRichard Fairhurst <richard@systemeD.net>
Wed, 22 Jan 2014 18:38:07 +0000 (18:38 +0000)
committerRichard Fairhurst <richard@systemeD.net>
Wed, 22 Jan 2014 18:38:07 +0000 (18:38 +0000)
app/assets/javascripts/routing_engines/mapquest_bicycle.js

index 123f2700a2ffcb5c6137757694d9939e564e8016..5dfe13234954e5957e960b341938dcc4cfa1720b 100644 (file)
@@ -9,6 +9,27 @@ OSM.RoutingEngines.list.push({
        name: 'Bicycle (MapQuest Open)',
        draggable: true,
        _hints: {},
+       MQ_SPRITE_MAP: {
+               0: 1, // straight
+               1: 2, // slight right
+               2: 3, // right
+               3: 4, // sharp right
+               4: 5, // reverse
+               5: 6, // sharp left
+               6: 7, // left
+               7: 8, // slight left
+               8: 5, // right U-turn
+               9: 5, // left U-turn
+               10: 2, // right merge
+               11: 8, // left merge
+               12: 2, // right on-ramp
+               13: 8, // left on-ramp
+               14: 2, // right off-ramp
+               15: 8, // left off-ramp
+               16: 2, // right fork
+               17: 8, // left fork
+               18: 1  // straight fork
+       },
        getRoute: function(final,points) {
                var url="http://open.mapquestapi.com/directions/v2/route?key=Fmjtd%7Cluur290anu%2Crl%3Do5-908a0y";
                var from=points[0]; var to=points[points.length-1];
@@ -20,6 +41,8 @@ OSM.RoutingEngines.list.push({
                this.requestJSONP(url+"&callback=");
        },
        gotRoute: function(router,data) {
+               // *** what if no route?
+               
                var poly=[];
                var shape=data.route.shape.shapePoints;
                for (var i=0; i<shape.length; i+=2) {
@@ -30,6 +53,13 @@ OSM.RoutingEngines.list.push({
                // data.shape.maneuverIndexes links turns to polyline positions
                // data.legs[0].maneuvers is list of turns
                console.log(data);
-//             router.setItinerary(data.route_instructions);
+               var steps=[];
+               var mq=data.route.legs[0].maneuvers;
+               for (var i=0; i<mq.length; i++) {
+                       var s=mq[i];
+                       var d=(i==mq.length-1) ? 15: this.MQ_SPRITE_MAP[s.turnType];
+                       steps.push([L.latLng(s.startPoint.lat, s.startPoint.lng), d, s.narrative, s.distance*1000]);
+               }
+               router.setItinerary( { steps: steps });
        }
 });