Google maps api 3 即使optimizeWaypoints设置为True,Google Map API也不提供优化的路线

Google maps api 3 即使optimizeWaypoints设置为True,Google Map API也不提供优化的路线,google-maps-api-3,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", s

它给出了不正确的路径:

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

如何计算英里数?(根据建议,我在问题中添加了这一点


英里数是根据谷歌API响应计算的

谷歌给出了长途路线(2152)

A:“34.040531,-118.255403”#加利福尼亚州洛杉矶第九街东110号
B:“48.182379,-117.042542”#华盛顿州新港联合大道北235号
C:“38.657527,-120.972854”#加利福尼亚州卡梅隆公园Coach巷3300号
A:“34.040531,-118.255403”#加利福尼亚州洛杉矶第九街东110号

优化路线应为(1307)
A:“34.040531,-118.255403”#加利福尼亚州洛杉矶第九街东110号
B:“38.657527,-120.972854”#加利福尼亚州卡梅隆公园长途汽车巷3300号
C:“48.182379,-117.042542”#华盛顿州新港联合大道北235号

答:“34.040531,-118.255403”#110 E 9th St,洛杉矶,加利福尼亚州

发生的事情是这样的。您正在计划一次往返旅行,从A点开始和结束

如果您选择“优化”,您将进入A->B->C->A

如果您选择“未优化”,您将进入A->C->B->A

它们之间的距离如下所示:

  • A-B=406英里
  • B-C=899英里
  • A-C=1252英里
加上这三个距离,您总共得到2557英里,这是整个往返行程的距离,无论您选择哪条路线,优化还是非优化

在代码中循环如下:

"34.040531,-118.255403" -> "38.657527,-120.972854" -> "48.182379, -117.042542"  -> "34.040531,-118.255403"
Miles: 1307 miles
for(i=0;ib->C=406+899=1305)
  • 未优化=A->C->B=1252+899=2151
  • 因此,不计算从倒数第二站到终点站的路程,这就解释了旅程长度的差异

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

    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";
    }
    
    for(i=0;i

    我再清楚不过了。

    很有趣。你说的是从A点出发,经过B点和C点,回到A点(换言之,经过B点和C点的往返)。谷歌说A->B->C->A=2152英里,但你说A->C->B->A=1307英里。换言之,反向行驶会增加845英里(制作您声称的短版仅比短版长1307英里65%)任何人谁可以帮助我解决这个问题,似乎没有回答,我认为这个问题是在谷歌APII重复-你是如何计算英里的距离,你从哪里得到2152和1307?我已经解释了新的答案,因为评论框是如此基础的每一个建议,包括计算细节毫无疑问,你说得对极了,我们错过了计算完成往返行程的最后一段路程,我们做了必要的更改,所以我们采取了任何一种情况,但最终还是走了2557英里多亏了堆积如山的邓卡尼花了一段时间,但很高兴你终于解决了问题
    for (i = 0; i < response.routes[0].legs.length; i++) {