2013-08-03 12 views
5

Ich versuche gerade einen Weg zu finden, wie man mit Google Maps Api V3 eine gerade Route bekommt.Google Maps Api gerade (kürzeste) Route

Ich habe es bereits geschafft, den Geocode und den Routenplanerdienst zu verwenden, um eine Route von Punkt A nach Punkt B zu erhalten, einschließlich zweier alternativer Routen. Ich experimentierte auch mit "Keine Autobahnen" und "Keine Maut", aber nichts scheint dieses Problem vollständig zu lösen ... Im Moment überprüfe ich die drei gegebenen Routen für die niedrigsten Meilen, aber das muss nicht wirklich der kürzeste Weg sein .

Ich bin nicht den schnellsten oder kürzesten Weg gesucht, aber nur eine geraden Strecke mit als niedrigeren Meilen wie möglich.

Da ich keine Thread mit Hilfe von Google finden konnte etwas zu erklären, wie ich brauche, frage ich Sie. Vielleicht hat jemand hier eine Lösung ...

S.S .: Ich kann auch nicht den "Fußgängermodus" verwenden, da dieser als Navigationshilfe für unsere lokalen Feuerwehrautos verwendet wird, wenn unsere montierten Navigationssysteme nicht wieder funktionieren. Das ist auch der Grund, warum wir so niedrige Kilometer wie möglich brauchen - wenn man hier einen Feuerwehrwagen fährt, ist die schnellste Route 99% die mit den niedrigsten Meilen, aber die Api lässt mich das nicht entscheiden und besteht auf Hauptstraßen

+0

Haben Sie jemals eine Lösung gefunden? – Tarlen

+0

Die Antwort von Soldeplata Saketos scheint im Moment die beste Lösung zu sein. Es ist nicht das, was ich erwartet habe, aber ich denke, es ist das, was wir derzeit am nächsten bekommen. – user2649424

Antwort

1

Um die kürzeste Route von A nach BI zu erhalten, würde man verschiedene Abfragen mit dem "alternatives = true" -Parameter machen und mit dem "vermeiden" -Parameter zwischen vermeiden = maut, vermeiden = Autobahnen und dann würde ich alle Ergebnisse vergleichen Wähle die kürzeste Route.

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

Ich verwende eine Lösung, wie ich here sagte, dass Route einmal aufruft und filtert die Ergebnisse in einer Art und Weise, die Sie nützlich finden. In meinem Beispiel berechne ich die kürzeste Route.