2016-10-22 4 views
0

이것은 조금 까다 롭습니다, 그게 지금 몇 시간 동안 있었어.구글지도 api 부정확 한 계산

양식이 중간 웨이 포인트와 함께 사용되는 경우 "거리"및 "비용"이 올바르게 계산됩니다. 어떻게하면 경유지가있는 경우 계산은 "시작"주소와 첫 번째 경유지 사이에서만 이루어집니다. 그것은 목적지와 다른 웨이 포인트를 완전히 무시합니다.

var inputs = document.getElementById('start'); 
var autocompletes = new google.maps.places.Autocomplete(inputs, options); 
var inpute = document.getElementById('end'); 
var autocompletee = new google.maps.places.Autocomplete(inpute, options); 

     directionsDisplay = new google.maps.DirectionsRenderer(); 
     var melbourne = new google.maps.LatLng(-31.953512, 115.857048); 
     var myOptions = { 
      zoom:12, 
      mapTypeId: google.maps.MapTypeId.ROADMAP, 
      center: melbourne 
     } 

     map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
     directionsDisplay.setMap(map); 

    } 

    function calcRoute() { 
     var start = document.getElementById('start').value; 
     var end = document.getElementById('end').value; 
     if (waypoints.value) { 
     var waypts = []; 
     var optionsArray = document.getElementById("waypoints").value.split('\n'); 
     for (var i = 0; i < optionsArray.length; i++) { 
        if(optionsArray.length>0) { 
           waypts.push({ 
           location:optionsArray[i], 
           stopover:true}); 
        } 
     } 
     } 
     var distanceInput = document.getElementById("distance"); 
     var costInput = document.getElementById("cost"); 

if (waypoints.value) { 
     var request = { 
      origin:start, 
      destination:end, 
      waypoints: waypts, 
      optimizeWaypoints: true, 
      travelMode: google.maps.DirectionsTravelMode.DRIVING 
     }; 
     } else { 
     var request = { 
      origin:start, 
      destination:end, 
      optimizeWaypoints: true, 
      travelMode: google.maps.DirectionsTravelMode.DRIVING 
     }; 
} 
     directionsService.route(request, function(response, status) { 
      if (status == google.maps.DirectionsStatus.OK) { 
       directionsDisplay.setDirections(response); 
       distanceInput.value = response.routes[0].legs[0].distance.value/1000; 
costInput.value = (2 * (response.routes[0].legs[0].distance.value/1000)); 

      } 
     }); 




    } 
    </script> 
</head> 
<body onload="initialize()"> 
    <div> 

     <p> 
      <label for="start">Pickup from: </label> 
      <input type="text" name="start" id="start" autocomplete="on" size="40"/> 

      <label for="end">Delivered to: </label> 
      <input type="text" name="end" id="end" autocomplete="on" size="40"/><BR> 
Other Deliveries:<BR> 
<textarea id="waypoints" name="waypoints" onclick="this.value='';" cols="10" rows="10">Address, Suburb, State 
(Address is Optional) 
New line for each address</textarea> 
     </p> 
<p> 
<div id="ins"></div> 
</p> 
<p> 
      <input type="submit" value="Calculate" onclick="if (waypoints.value == 'Address, Suburb, State\n(Address is Optional)\nNew line for each address') { waypoints.value=''}; calcRoute()" /> 
     </p> 
     <p> 
      <label for="distance">Distance (km): </label> 
      <input type="text" name="distance" id="distance" readonly="true" /> 
     </p> 
     <p> 
      <label for="cost">MAX cost: 1 standard item going direct</label> 
      <input type="text" name="cost" id="cost" readonly="true"/> 
     </p> 
    </div> 
    <div id="map_canvas" style="width:300px; height:200px;"></div> 

나는 알고 : distanceInput.value = response.routes [0] .legs [0] .distance.value/1000; costInput.value = (2 * (response.routes [0] .legs [0] .distance.value/1000)); 은 계산을합니다. 하지만 내가 함께 모은 것은 없습니다. 당신이 중간 점을 추가하는 경우

, 당신에게

+0

중복 (http://stackoverflow.com/questions/28702077/adding-waypoints-to-로 계산되어야한다 google-distance-matrix-to-determined-mileage) – geocodezip

답변

0

감사 response.routes [0] .legs에 1 개 이상의 요소가있다.

은 그래서 거리 [주행 거리를 결정하기 위해 구글 거리 매트릭스에 중간 지점을 추가]이

var totalDistance = 0; 

response.routes[0].legs.forEach(function(leg) { 
    totalDistance += leg.distance.value/1000; 
}) 

distanceInput.value = totalDistance; 
+0

와우 .. 대단한! 매우 감사합니다 :) –