Cálculo de tarifas de taxi utilizando php con matriz de distancia de google api v2

Quiero tener un cálculo de tarifa de taxi en mi sitio web.

Tengo los siguientes requisitos:

Si el cálculo de la matriz de distancia de Google muestra los siguientes kilómetros de distancia, la tasa debería ser la siguiente:

  • De 0 a 10 km = $ 65 (precio fijo) + 11%
  • 10 km = $ 70 + 11%
  • 15km = $ 80 + 11%
  • 20km = $ 90 + 11%
  • 25km = $ 100 + 11%
  • 30km = $ 120 + 11%
  • 30 km por encima = $ 4 / km

Pongo la tasa como $ 2 por km desde 10 km por encima hasta 30 km + $ 50 extra que resulta:

si el taxi fue conducido por

  • 20 km = 20 km × $ 2 + $ 50 = $ 90 + 11%
  • 21 km = 21 km × $ 2 + $ 50 = $ 92 + 11%
  • 22km = 22km × $ 2 + $ 50 = $ 94 + 11% y así sucesivamente

pero no sé cómo calcular el precio fijo de $ 65, que es la tarifa fija por debajo de la distancia de 10 km y la tasa de $ 120 por 30 km y 30 km por encima, es decir, $ 4 / km.

el script que utilicé para Google Distance Matrix es para mostrar una corrección de $ 2 / km + $ 50: (No he agregado el 11% en este script)

   var geocoder, location1, location2, gDir; var map; var gdir; var geocoder = null; var addressMarker; var directionsPanel; var directions; function initialize() { geocoder = new GClientGeocoder(); gDir = new GDirections(); GEvent.addListener(gDir, "load", function() { var drivingDistanceMiles = gDir.getDistance().meters / 1000; var drivingDistanceround = Math.round(drivingDistanceMiles*100)/100; var cost = ((drivingDistanceMiles * ) + ()) ) + ()) }; */ var fare=cost; var fare = Math.round(fare*100)/100; document.getElementById('results').innerHTML = '
Distance: ' + drivingDistanceround + ' Kilemeters
Estimated Cost: $ ' + fare + '
'; }); if (GBrowserIsCompatible()) { map = new GMap2(document.getElementById("map_canvas")); map.setCenter(new GLatLng(-33.722626, 150.810585), 10); gdir = new GDirections(map, document.getElementById("directions")); GEvent.addListener(gdir, "load", onGDimrectionsLoad); GEvent.addListener(gdir, "error", handleErrors); } } function setDirections(fromAddress, toAddress, locale) { gdir.load("from: " + fromAddress + " to: " + toAddress); } function showLocation() { geocoder.getLocations(document.forms[0].from.value, function (response) { if (!response || response.Status.code != 200) { alert("Sorry, we were unable to geocode the first address"); } else { location1 = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address}; geocoder.getLocations(document.forms[0].to.value, function (response) { if (!response || response.Status.code != 200) { alert("Sorry, we were unable to geocode the second address"); } else { location2 = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address}; gDir.load('from: ' + location1.address + ' to: ' + location2.address); } }); } }); /////////////////////////////////////////////////////////// var directionsPanel; var directions; directionsPanel = document.getElementById("route"); directions = new GDirections(map, directionsPanel); directions.load("from: "+document.forms[0].from.value+" to: "+document.forms[0].to.value); }

From: To:

Me gustaría sugerirle que vaya a Google Maps API V3 , aquí está mi guión probado según sus requisitos, y según su guión anterior, le sugiero que elija el guión de @ Pierre-Francoys Brousse para las tasas,

       Taxi Fare Calculation using PHP with GOOGLE MAPS API V3      
From:
To:

Si su pregunta es cómo puede tener un precio fijo o una “tasa” variable, ¿por qué no tiene simplemente un if / else o un switch / case logic? Además, ¿por qué estás inyectando php cuando esto podría hacerse en javascript?

En lugar de

  var drivingDistanceMiles = gDir.getDistance().meters / 1000; var drivingDistanceround = Math.round(drivingDistanceMiles*100)/100; var cost = ((drivingDistanceMiles * ) + ()) ) + ()) 

¿Por qué no solo hacer

 var rate = 2; var extra = 50; taxModifier = 1.11; //11% //... var drivingDistanceMiles = gDir.getDistance().meters / 1000; var drivingDistanceround = Math.round(drivingDistanceMiles*100)/100; var cost; if (drivingDistanceMiles < 10){ cost = 65; } else if( drivingDistanceMiles >= 10 && drivingDistanceMiles < 30) { cost = (drivingDistanceMiles * rate + extra) * taxModifier ; } else { cost = drivingDistanceMiles * 4. * taxModifier ; }