计算两个地点之间的距离并计算价格 [英] Calculate the distance between 2 locations and calculate a price
问题描述
位置1,位置2,位置3,位置4.
我现在需要计算位置2和位置3之间的距离。
并且获取该距离并显示它并显示一个价格至此公式
- 0-10kms = $ 99,
- 11-20kms加上每增加5美元km, b 21 - 35公里,每增加1公里加$ 3.75,
36公里加上每增加公里加$ 3.50,
- 11-20kms加上每增加5美元km, b 21 - 35公里,每增加1公里加$ 3.75,
我该如何解决这个问题?
到目前为止,我有这个(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:// //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>
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
- 0-10kms = $99,
- 11-20kms plus $5 per each additional km,
- 21 - 35kms plus $3.75 per each additional km,
- 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;
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屋!