即使optimizeWaypoints设置为True,Google Map API也不会提供优化路线

时间:2013-12-27 07:29:45

标签: google-maps-api-3

var request = {
        origin: "34.040531,-118.255403",
        destination: "34.040531,-118.255403",
        waypoints: [{ location: "48.182379, -117.042542", stopover: true }, 
                    { location: "38.657527,-120.972854", stopover: true }],
        travelMode: google.maps.DirectionsTravelMode.DRIVING,      
        optimizeWaypoints: true,      
};

它提供了错误的路径:

"34.040531,-118.255403" -> "48.182379, -117.042542" -> "38.657527,-120.972854" -> "34.040531,-118.255403" 
Miles:- 2152 miles

Attached image for incorrect path

但优化路线应

"34.040531,-118.255403" -> "38.657527,-120.972854" -> "48.182379, -117.042542"  -> "34.040531,-118.255403"
Miles: 1307 miles

计算里程数? (根据建议,我已经添加了这个问题


Miles是根据Google API响应计算的

Google提供长途(2152)

A:“34.040531,-118.255403”#110 E 9th St,Los Angeles,CA
B:“48.182379,-117.042542”#235 N. Union Ave,Newport,WA
C:“38.657527,-120.972854”#3300 Coach Lane,Cameron Park,CA
答:“34.040531,-118.255403”#110 E 9th St,洛杉矶,加利福尼亚州

优化路线应为(1307)
答:“34.040531,-118.255403”#110 E 9th St,Los Angeles,CA
B:“38.657527,-120.972854”#3300 Coach Lane,Cameron Park,CA
C:“48.182379,-117.042542”#235 N. Union Ave,Newport,WA
答:“34.040531,-118.255403”#110 E 9th St,洛杉矶,加利福尼亚州

1 个答案:

答案 0 :(得分:2)

所以这就是发生的事情。您计划的旅程是往返旅程,从A点开始和结束。

如果您选择'优化',那么您将选择A - > B - > C - >甲

如果您选择“未优化”,那么您将选择A - > C - > B - >甲

这些之间的距离如下:

  • A-B = 406英里
  • B-C = 899英里
  • A-C = 1252英里

添加这三个距离,总共可以得到2557英里,即总往返行程的距离,无论您在旅程的哪个方向,优化或未优化。

你在代码中循环这样:

for (i = 0; i <= response.routes[0].legs.length - 2; i++) {
    var route = response.routes[0];
    var d = route.legs[i].distance.text;
    totalmiles = totalmiles + roundNumber(parseFloat((d.split(" ")[0]).replace(",", "")), 2);
    document.getElementById('TotalMiles').innerHTML = totalmiles + " miles";
}

注意你正在循环到长度为2。你在4点之间旅行,因此你有3条腿可以旅行。但是在计算你正在循环0..1的距离时,你是故意(我假设?)不计算最后一条腿回到最终目的地。

所以你要像这样计算距离:

  • optimized = A - &gt; B - &gt; C = 406 + 899 = 1305
  • 未优化= A - &gt; C - &gt; B = 1252 + 899 = 2151

因此,不计算从倒数第二站到最终目的地的腿,这解释了行程长度的差异。

将你的循环更改为这样,所以你也计算了旅程的最后一段:

for (i = 0; i < response.routes[0].legs.length; i++) {

我无法让它更清楚。