2013-08-03 45 views
5

Tôi hiện đang cố gắng tìm cách để có được một tuyến đường thẳng với Google Maps Api V3.Tuyến đường thẳng của Google Maps Api (ngắn nhất)

Tôi đã quản lý nó để sử dụng mã địa lý và dịch vụ chỉ đường để có tuyến đường từ điểm A đến điểm B, bao gồm hai tuyến đường thay thế. Tôi cũng đã thử nghiệm với "Không xa lộ" và "Không có lệ phí cầu đường" nhưng không xuất hiện để giải quyết vấn đề này hoàn toàn ... Tại thời điểm này tôi kiểm tra ba tuyến đường cho hàng dặm thấp nhất nhưng điều này đã được chứng minh là không thực sự là con đường ngắn nhất .

Tôi không tìm kiếm con đường nhanh nhất hoặc nhanh nhất nhưng chỉ là một đường thẳng với như dặm thấp càng tốt.

Vì tôi không tìm thấy bất kỳ chủ đề nào bằng cách sử dụng google giải thích điều gì đó như tôi cần tôi hỏi bạn. Có lẽ ai đó có giải pháp ở đây ...

P .: Tôi cũng không thể sử dụng "Chế độ dành cho người đi bộ" vì điều này được sử dụng làm trợ giúp điều hướng cho xe cứu hỏa địa phương của chúng tôi khi hệ thống điều hướng được gắn của chúng tôi không hoạt động trở lại. Đây cũng là lý do tại sao chúng ta cần cây số càng thấp càng tốt - khi lái một chiếc Firetruck tròn đây con đường nhanh nhất là 99% một với dặm thấp nhất nhưng Api sẽ không cho phép tôi quyết định đó và nhấn mạnh vào việc sử dụng các tuyến đường chính

+0

Bạn đã bao giờ tìm được giải pháp – Tarlen

+0

Câu trả lời của Soldeplata Saketos có vẻ là giải pháp tốt nhất vào lúc này. Nó không phải là những gì tôi mong đợi nhưng tôi nghĩ rằng đó là gần nhất chúng ta có thể nhận được hiện nay. – user2649424

Trả lời

1

Để có được tuyến đường ngắn nhất từ ​​A đến BI, bạn nên thực hiện các truy vấn khác nhau với thông số "thay thế = true", chơi với thông số "tránh" giữa tránh = số điện thoại, tránh = đường cao tốc và sau đó tôi sẽ so sánh tất cả kết quả với chọn tuyến đường ngắn nhất.

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

tôi sử dụng một giải pháp, như tôi đã nói here, mà các cuộc gọi dịch vụ tuyến một lần và lọc các kết quả trong một cách mà bạn tìm thấy hữu ích. Trong ví dụ của tôi, tôi tính toán tuyến đường ngắn nhất.

Các vấn đề liên quan