2016-07-29 10 views
0

したがって、基本的に私は4つの場所の間の距離を計算するこのスクリプト(最初のwebdesigner.comとgeocodezipのクレジット)を持っています。 位置1、位置2、位置3、位置4 私は今LOCATION2及び位置3 との間の距離を計算してもその距離を取得し、それを表示し、この式2つの場所の間の距離を計算し、価格を計算します

  1. に応じて価格を表示する必要があります0-10kms = $ 99
  2. 11-20kmsプラス各追加のキロあたり$ 5、
  3. 21 - 35kmsプラス各追加のキロあたり$ 3.75
  4. 36kms +プラス各追加のキロあたり$ 3.50、

どうすればいいですか?

は、これまでのところ私は式には、私の状況のた​​めに間違っていると問題2は、式が前の計算からの距離を取得していないで、問題1は、 (Price Calculation based on the distance covered) (Rajaprabhuにクレジット)これを持っています。

var request = { 
    origin:location2, 
    destination:location3, 
    travelMode: google.maps.DirectionsTravelMode.DRIVING 
}; 
directionsService.route(request, function(response, status) 
{ 
    if (status == google.maps.DirectionsStatus.OK) 
    { 
     var distance = response.routes[0].legs[0].distance.text; 
     var duration = response.routes[0].legs[0].duration.text; 
     var dvDistance = document.getElementById("dvDistance"); 
     dvDistance.innerHTML = ""; 
     dvDistance.innerHTML += "The one way Distance is: " + distance + "<br />"; 
     dvDistance.innerHTML += "The one way Duration is: " + duration; 

     //calculate the one way price using the klms 
     var kms = distance; 
     var price_1 = (kms > 0) ? 3 : 0; kms = (kms > 0)? kms - 1 : 0; 
     var price_2 = (kms - 14) > 0 ? (14 * 1.60) : (kms * 1.60); kms = (kms-14)>0 ? kms - 14 : 0; 
     var price_3 = (kms - 15) > 0 ? (15 * 1.40) : (kms * 1.40); kms = (kms-15)>0 ? kms - 15 : 0; 
     var price_4 = (kms > 0) ? (kms * 1.20) : 0; 

     document.getElementById("displayprice").innerHTML = "the one way price is: " + (price_1 + price_2 + price_3 + price_4); 


    } 
}); 

これで式に固執しました。 1. 35kmを超えるものは、間違った結果をもたらします。 2. 10km以下の場合は、デフォルトで$ 99になります。 the documentationから

//calculate the one way price using the klms 
       var kms = distance; 
       console.log(kms); 
       var price_1 = (kms > 0) ? 99 : 0; kms = (kms > 0)? kms - 10 : 0; 
       var price_2 = (kms - 10) > 0 ? (10 * 5.00) : (kms * 5.00); kms = (kms-10)>0 ? kms - 10 : 0; 
       var price_3 = (kms - 20) > 0 ? (15 * 3.75) : (kms * 3.75); kms = (kms-20)>0 ? kms - 20 : 0; 
       var price_4 = (kms > 0) ? (kms * 3.50) : 0; 
+0

あなたの希望する機能を実装するために何をしましたか?どのような問題が発生しましたか? – geocodezip

+0

directionsDisplay.setMapの直下にあるオリジナルの2ウェイ計算からコードを追加しましたが、それは機能しますが、出力が完全に間違った場所に置かれます。私はそれが 'Sunday Price'のすぐ下に出力されるようにしたい そして、私が出力を2倍の乗数で変更しようとすると、NaNの結果が得られます。数式を追加すると、私は完全に失われてしまいます。 – Jon

+0

更新:location2のコードを追加しました - 位置3、距離と継続時間の計算。今私はそれを正しい場所に表示させます。 klmsに式を適用するにはどうすればよいですか? ie:0-10kms = $ 99、11-20kms各kmあたり$ 5、各kmあたり21-35kms $ 3.75、各km当たり36kms + $ 3.50、 – Jon

答えて

1

google.maps.Distanceオブジェクトの仕様

距離の表現数値と表示文字列として。

プロパティ

  • テキスト |タイプ:文字列|要求に指定されたUnitSystemを使用して、距離値の文字列表現。

  • |タイプ:番号|メートル単位の距離。

あなたの距離は文字列です:var distance = response.routes[0].legs[0].distance.text;

あなたは(メートル単位)の数値を使用する必要があります。

var distance = response.routes[0].legs[0].distance.value/1000; 

proof of concept fiddle

コードスニペット:

var geocoder; 
 
var map; 
 
// New York, NY, USA (40.7127837, -74.00594130000002) 
 
// Newark, NJ, USA (40.735657, -74.1723667) 
 
// Philadelphia, PA, USA (39.9525839, -75.16522150000003) 
 
// Baltimore, MD, USA (39.2903848, -76.61218930000001) 
 

 

 
var location1 = new google.maps.LatLng(40.7127837, -74.005941); 
 
var location2 = new google.maps.LatLng(40.735657, -74.1723667); 
 
var location3 = new google.maps.LatLng(39.9525839, -75.1652215); 
 
var location4 = new google.maps.LatLng(39.2903848, -76.6121893); 
 

 
function initialize() { 
 
    // create a new map object 
 
    // set the div id where it will be shown 
 
    // set the map options 
 
    var mapOptions = { 
 
    center: { 
 
     lat: 42, 
 
     lng: -72 
 
    }, 
 
    zoom: 4 
 
    } 
 
    map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 
 

 
    // show route between the points 
 
    directionsService = new google.maps.DirectionsService(); 
 
    directionsDisplay = new google.maps.DirectionsRenderer({ 
 
    suppressMarkers: true, 
 
    suppressInfoWindows: true 
 
    }); 
 
    directionsDisplay.setMap(map); 
 

 

 
    var request = { 
 
    origin: location1, 
 
    waypoints: [{ 
 
     location: location2, 
 
    }, { 
 
     location: location3, 
 
    }], 
 
    destination: location4, 
 
    travelMode: google.maps.DirectionsTravelMode.DRIVING 
 
    }; 
 

 
    directionsService.route(request, function(response, status) { 
 
    if (status == google.maps.DirectionsStatus.OK) { 
 
     directionsDisplay.setDirections(response); 
 
     var route = response.routes[0]; 
 
     var summaryPanel = document.getElementById("directions_panel"); 
 
     summaryPanel.innerHTML = ""; 
 
     // For each route, display summary information. 
 
     for (var i = 0; i < route.legs.length; i++) { 
 
     var routeSegment = i + 1; 
 
     summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br />"; 
 
     summaryPanel.innerHTML += route.legs[i].start_address + " to "; 
 
     summaryPanel.innerHTML += route.legs[i].end_address + "<br />"; 
 
     summaryPanel.innerHTML += route.legs[i].distance.text + "<br />"; 
 
     summaryPanel.innerHTML += route.legs[i].duration.text + "<br />"; 
 
     } 
 
     computeTotalDistance(response); 
 
     var request = { 
 
     origin: location2, 
 
     destination: location3, 
 
     travelMode: google.maps.DirectionsTravelMode.DRIVING 
 
     }; 
 
     directionsService.route(request, function(response, status) { 
 
     if (status == google.maps.DirectionsStatus.OK) { 
 
      var distance = response.routes[0].legs[0].distance.value/1000; 
 
      var duration = response.routes[0].legs[0].duration.text; 
 
      var dvDistance = document.getElementById("dvDistance"); 
 
      dvDistance.innerHTML = ""; 
 
      dvDistance.innerHTML += "The one way Distance (segment 2) is: " + distance + "<br />"; 
 
      dvDistance.innerHTML += "The one way Duration (segment 2) is: " + duration; 
 

 
      //calculate the one way price using the klms 
 
      var kms = distance; 
 
      console.log(kms); 
 
      var price_1 = (kms > 0) ? 3 : 0; 
 
      kms = (kms > 0) ? kms - 1 : 0; 
 
      var price_2 = (kms - 14) > 0 ? (14 * 1.60) : (kms * 1.60); 
 
      kms = (kms - 14) > 0 ? kms - 14 : 0; 
 
      var price_3 = (kms - 15) > 0 ? (15 * 1.40) : (kms * 1.40); 
 
      kms = (kms - 15) > 0 ? kms - 15 : 0; 
 
      var price_4 = (kms > 0) ? (kms * 1.20) : 0; 
 

 
      document.getElementById("displayprice").innerHTML = "the one way price (segment 2) is: $" + (price_1 + price_2 + price_3 + price_4).toFixed(2); 
 
     } 
 
     }); 
 
    } else { 
 
     alert("directions response " + status); 
 
    } 
 
    }); 
 
} 
 
google.maps.event.addDomListener(window, "load", initialize); 
 

 

 
function computeTotalDistance(result) { 
 
    var totalDist = 0; 
 
    var totalTime = 0; 
 
    var myroute = result.routes[0]; 
 
    for (i = 0; i < myroute.legs.length; i++) { 
 
    totalDist += myroute.legs[i].distance.value; 
 
    totalTime += myroute.legs[i].duration.value; 
 
    } 
 
    totalDist = totalDist/1000. 
 
    document.getElementById("total").innerHTML = "total distance is: " + totalDist + " km<br>total time is: " + (totalTime/60).toFixed(2) + " minutes<br>total price is: $" + ((totalTime/60).toFixed(2) * 2.1) + " dollars<br>saturday price is: $" + ((totalTime/60).toFixed(2) * 2.35) + " dollars<br>sunday price is: $" + ((totalTime/60).toFixed(2) * 2.6) + " dollars"; 
 
}
html, 
 
body, 
 
#map_canvas { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<div id="map_canvas"></div> 
 
<div id="dvDistance"></div> 
 
<div id="displayprice"></div> 
 
<div id="total"></div> 
 
<div id="directions_panel"></div>

+0

これで公式に固執しました。 :( – Jon

関連する問題