2013-08-03 17 views
5

Attualmente sto cercando di trovare un modo per ottenere un percorso dritto con Google Maps Api V3.Google Maps Api dritto (più breve) route

Sono già riuscito a utilizzare il codice geografico e il servizio di indicazioni stradali per ottenere un percorso dal punto A al punto B, compresi due percorsi alternativi. Ho anche sperimentato "No highways" e "No tolls" ma niente sembra risolvere questo problema interamente ... Al momento controllo le tre rotte indicate per le miglia più basse ma questo deve essere dimostrato che non è davvero la strada più breve .

Sono non cercare il percorso più veloce o più veloce, ma solo un percorso rettilineo con come miglia basse possibile.

Come non ho trovato qualsiasi thread utilizzando google che spiega qualcosa come ho bisogno di chiederti. Forse qualcuno ha una soluzione qui ...

P.S .: Anche io non posso usare la "Modalità pedonale" in quanto viene utilizzata come guida di navigazione per i nostri camion antincendio locali quando i nostri sistemi di navigazione montati non funzionano più. Questo è anche il motivo per cui abbiamo bisogno del più basso chilometraggio possibile - quando si guida un giro di firetruck qui il percorso più veloce è del 99% quello con le miglia più basse ma l'Api non me lo permette di decidere e di insistere sull'uso delle strade principali

+0

Hai mai trovato una soluzione – Tarlen

+0

La risposta di Soldeplata Saketos sembra essere la soluzione migliore al momento. Non è quello che mi aspettavo, ma penso che sia il più vicino che possiamo ottenere al momento. – user2649424

risposta

1

Per ottenere il percorso più breve da A a BI suggerire di fare query diverse con il parametro "alternative = true", giocando con il parametro "avoid" tra avoid = toll, avoid = highways, quindi confronterei tutti i risultati con scegli la via più breve

directionsService = new google.maps.DirectionsService; 
//avoiding tolls 
      directionsService.route({ 
       origin: { 
        'placeId': originId 
       }, 
       destination: { 
        'placeId': destinationId 
       }, 
       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: { 
        'placeId': originId 
       }, 
       destination: { 
        'placeId': destinationId 
       }, 
       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, 
          } 
         }) 
        }) 
       }) 
      }); 
     } 

    } 
1

Io uso una soluzione, come ho detto here, che chiama il servizio percorso una sola volta e filtra i risultati in modo che trovi utile. Nel mio esempio, sto calcolando il percorso più breve.