计算两个地点之间的距离并计算价格 [英] Calculate the distance between 2 locations and calculate a price

查看:145
本文介绍了计算两个地点之间的距离并计算价格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以基本上我有这个脚本(信贷给1stwebdesigner.com和geocodezip),它计算4个地点之间的距离。
位置1,位置2,位置3,位置4.
我现在需要计算位置2和位置3之间的距离。
并且获取该距离并显示它并显示一个价格至此公式


  1. 0-10kms = $ 99,
  2. 11-20kms加上每增加5美元km, b 21 - 35公里,每增加1公里加$ 3.75,
    36公里加上每增加公里加$ 3.50,

我该如何解决这个问题?



到目前为止,我有这个(Credits to Rajaprabhu)
根据距离计算的价格
,问题1是,公式对我的情况是错误的,问题2是公式没有得到与以前计算的距离。

  var request = {
origin:location2,
destination:location3,
travelMode:google.maps.Di rectionsTravelMode.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 + =单程Distance:+ distance +< br />;
dvDistance .innerHTML + =The one way Duration is:+ duration;

//使用klms计算单向价格
var kms =距离;
var price_1 =( (kms> 0)≤3:0; kms =(kms> 0)≥kms_1:0;
var price_2 =(kms_14)>0≤(14×1.60):( kms * (kms = 1.60); kms =(kms-14)>0≤kms-14:0;
var price_3 =(kms-15)> 0(15 * 1.40) (kms-15)>0≤kms-15:0;
var price_4 =(kms> 15) 0)? (kms * 1.20):0;

document.getElementById(displayprice)。innerHTML =单程价格为:+(price_1 + price_2 + price_3 + price_4);


}
});

现在停留在公式上。
1.任何超过35公里的结果都是错误的。
2. 10公里及以下应该真的默认为99美元。

  //使用klms $计算单向价格b $ b var kms =距离; 
console.log(kms);
var price_1 =(kms> 0)? 99:0; kms =(kms> 0)?公里 - 10:0;
var price_2 =(kms - 10)> 0? (10 * 5.00):(kms * 5.00); kms =(kms-10)> 0公里 - 10:0;
var price_3 =(kms - 20)> 0? (15 * 3.75):(kms * 3.75); kms =(kms-20)> 0公里 - 20:0;
var price_4 =(kms> 0)? (kms * 3.50):0;


解决方案

From 文档

lockquote

google.maps.Distance对象规范



将距离表示为数字值和显示字符串。



属性




  • 文本类型:字符串|使用请求中指定的UnitSystem的距离值的字符串表示形式。

  • 类型:数字|以米为单位的距离。

    你的距离是一个字符串: var distance = response.routes [0] .legs [0] .distance.text;



    您应该使用数字值以米计):

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

    概念证明小提琴



    程式码片段:

    < pre-class =snippet-code-js lang-js prettyprint-override> var geocoder; var map; //纽约,纽约,美国(40.7127837,-74.00594130000002)//美国新泽西州纽瓦克(40.735657,-74.1723667)//美国宾夕法尼亚州费城(39.9525839,-75.16522150000003)//美国马里兰州巴尔的摩(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() {//创建一个新的地图对象//设置div id在哪里显示//设置地图选项var mapOptions = { center:{lat:42,lng:-72},zoom:4} map = new google.maps.Map(document.getElementById(map_canvas),mapOptions); //显示点之间的路线directionsService = new google.maps.DirectionsService(); directionsDisplay = new google.maps.DirectionsRenderer({suppressMarkers:true,suppressInfoWindows:true}); directionsDisplay.setMap(地图); 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(var i = 0; i< route.legs.length; i ++){var routeSegment = i + 1; summaryPanel .innerHTML + =< b>路由段:+ 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.m aps.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 + =单程距离(段2)是:+ distance +< br />; dvDistance.innerHTML + =单向Duration(segment 2)是:+ duration; //使用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 (kms×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 pri ce_4 =(kms> 0)? (kms * 1.20):0; document.getElementById(displayprice)。innerHTML =单向价格(分段2):$+(price_1 + price_2 + price_3 + price_4).toFixed(2); }}); }其他{alert(指令响应+状态); }});} google.maps.event.addDomListener(window,load,initialize);函数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)+分钟< br>总价格是:$+((totalTime / 60).toFixed(2)* 2.1)+dollars星期六价格是:$+((totalTime / 60).toFixed(2)* 2.35)+美元的周日价格是:+((totalTime / 60).toFixed(2)* 2.6)+dollars;}

    < pre class =snippet-code-css lang-css prettyprint-override> html,body,#map_canvas {height:100%;宽度:100%; margin:0px; < script src =https://


    So basically I have this script (credits to 1stwebdesigner.com and geocodezip) which calculates the distance between 4 locations. Location 1, location 2, location 3, location 4. I now need to calculate the distance between location2 and location 3. and also get that distance and display it and display a price according to this formula

    1. 0-10kms = $99,
    2. 11-20kms plus $5 per each additional km,
    3. 21 - 35kms plus $3.75 per each additional km,
    4. 36kms+ plus $3.50 per each additional km,

    How do I go about this?

    So far I have this (Credits to Rajaprabhu) (Price Calculation based on the distance covered) , problem 1 is, the formula is wrong for my situation and problem 2 is the formula isn't getting the distance from the previous calculation.

    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);
    
    
        }
    });
    

    Stuck on the formula now. 1. anything over 35km gives a incorrect result. 2. 10km and under should really default to $99.

    //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;
    

    解决方案

    From the documentation:

    google.maps.Distance object specification

    A representation of distance as a numeric value and a display string.

    Properties

    • text | Type: string | A string representation of the distance value, using the UnitSystem specified in the request.

    • value | Type: number | The distance in meters.

    Your distance is a string: var distance = response.routes[0].legs[0].distance.text;

    You should use the numeric value (in meters):

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

    proof of concept fiddle

    code snippet:

    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>

    这篇关于计算两个地点之间的距离并计算价格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆