2013-08-03 195 views
5

我目前正試圖找到一種方法如何獲得與谷歌地圖API V3直線。谷歌地圖Api直(最短)路線

我已經管理它使用地理編碼和方向服務來獲得從A點到B點的路線,包括兩條替代路線。我也嘗試過「沒有高速公路」和「沒有收費」,但沒有任何東西能夠完全解決這個問題...... 目前我檢查三條最低路程的給定路線,但這必須證明不是真正的最短路線。

搜索最快或最快路線,而只是一個低英里儘可能直的路線。

因爲我沒有找到任何線程通過使用谷歌解釋像我需要的東西我問你。也許有人在這裏有一個解決方案...

P.S .:我也不能使用「行人模式」,因爲當我們的導航系統不能再次工作時,它被用作當地消防車的導航幫助。 這也是爲什麼我們需要儘可能低的公里 - 當駕駛一輛救火車在這裏駕駛時,最快的路線是99%的最低路程,但Api不會讓我決定並堅持使用主要道路

+0

您有沒有找到解決方案 – Tarlen

+0

Soldeplata Saketos的答案似乎是目前最好的解決方案。這不是我所期望的,但我認爲這是我們目前可以得到的最接近的。 – user2649424

回答

1

要獲得從A到BI的最短路線,建議使用「alternatives = true」參數進行不同的查詢,在avoid = toll,avoid = highways之間使用「avoid」參數進行播放,然後將所有結果與選擇最短的路線。

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

我用一個解決方案,因爲我說here,一旦調用航線和過濾器,你找到有用的方式的結果。在我的例子中,我正在計算最短路線。