An elegant way to find shortest and fastest route in Google Maps API v3?

后端 未结 6 845
耶瑟儿~
耶瑟儿~ 2020-12-03 03:46

I am making a taxi fare calculator. One of the business requirements is that, the company wants the shortest and fastest route options. I know Google directionService by def

6条回答
  •  暖寄归人
    2020-12-03 04:27

    I took code from Soldeplata Saketos answer and edited it since it wasn't working. Added params so you can just call it with it like.

    shortestRoute(origin, destination, map); 
    

    Works for me all though I'm not sure how correct it is.

    Here:

    function shortestRoute(origin, destination, map) {
    
      directionsService = new google.maps.DirectionsService();
      var routesResponses = [];
      //avoiding tolls
      directionsService.route({
        origin: origin,
        destination: destination,
        provideRouteAlternatives: true,
        avoidTolls: true,
        travelMode: google.maps.TravelMode.DRIVING
      }, function (response, status) {
        if (status === google.maps.DirectionsStatus.OK) {
          routesResponses.push(response);
        } else {
          window.alert('Directions request failed due to ' + status);
        }
      });
      //avoiding highways
      directionsService.route({
        origin: origin,
        destination: destination,
        provideRouteAlternatives: true,
        avoidHighways: true,
        travelMode: google.maps.TravelMode.DRIVING
      }, function (response, status) {
        if (status === google.maps.DirectionsStatus.OK) {
          routesResponses.push(response);
        } else {
          window.alert('Directions request failed due to ' + status);
        }
    
        //Results analysis and drawing of routes
        var fastest = Number.MAX_VALUE,
          shortest = Number.MAX_VALUE;
    
        routesResponses.forEach(function (res) {
          res.routes.forEach(function (rou, index) {
            console.log("distance of route " + index + ": ", rou.legs[0].distance.value);
            console.log("duration of route " + index + ": ", rou.legs[0].duration.value);
            if (rou.legs[0].distance.value < shortest) shortest = rou.legs[0].distance.value;
            if (rou.legs[0].duration.value < fastest) fastest = rou.legs[0].duration.value;
    
          })
        })
        console.log("shortest: ", shortest);
        console.log("fastest: ", fastest);
        //painting the routes in green blue and red
        routesResponses.forEach(function (res) {
          res.routes.forEach(function (rou, index) {
            new google.maps.DirectionsRenderer({
              map: map,
              directions: res,
              routeIndex: index,
              polylineOptions: {
                strokeColor: rou.legs[0].duration.value == fastest ? "red" : rou.legs[0].distance.value == shortest ? "darkgreen" : "blue",
                strokeOpacity: rou.legs[0].duration.value == fastest ? 0.8 : rou.legs[0].distance.value == shortest ? 0.9 : 0.5,
                strokeWeight: rou.legs[0].duration.value == fastest ? 9 : rou.legs[0].distance.value == shortest ? 8 : 3,
              }
            });
          });
        });
      });
    }
    

提交回复
热议问题