首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算两个地点之间的距离并计算价格

计算两个地点之间的距离并计算价格
EN

Stack Overflow用户
提问于 2016-07-29 12:16:37
回答 1查看 1.6K关注 0票数 0

基本上,我有这个脚本( 1stwebdesigner.com和geocodezip的学分),它计算了4个位置之间的距离。位置1,位置2,位置3,位置4。我现在需要计算location2与位置3之间的距离,并根据这个公式显示该距离并显示它并显示价格。

  1. 0-10公里=99美元,
  2. 11至20公里加每增加一公里5美元,
  3. 21 -35公里加上每增加一公里3.75美元,
  4. 36kms+加每增加一公里3.50美元,

我该怎么做?

到目前为止,我有这个(信用拉贾巴布) (基于覆盖距离的价格计算),问题1,公式对我的情况是错误的,问题2是公式没有得到的距离,以前的计算。

代码语言:javascript
复制
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.任何超过35公里的结果都是不正确的。2. 10公里及以下应实际违约至99美元。

代码语言:javascript
复制
//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;
EN

回答 1

Stack Overflow用户

发布于 2016-07-30 12:14:42

来自文献资料

google.maps.Distance对象规范 将距离表示为数值和显示字符串的表示。 属性

  • 文本类型: string _使用请求中指定的UnitSystem表示距离值。
  • \#类型:编号_以米为单位。

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

您应该使用数字值(以米为单位):

代码语言:javascript
复制
var distance = response.routes[0].legs[0].distance.value/1000;

概念小提琴的证明

代码片段:

代码语言:javascript
复制
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";
}
代码语言:javascript
复制
html,
body,
#map_canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
代码语言:javascript
复制
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id="map_canvas"></div>
<div id="dvDistance"></div>
<div id="displayprice"></div>
<div id="total"></div>
<div id="directions_panel"></div>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38658640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档