Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么谷歌地图在两点之间显示错误的持续时间?_Javascript_Google Maps_Google Maps Api 3_Google Directions Api - Fatal编程技术网

Javascript 为什么谷歌地图在两点之间显示错误的持续时间?

Javascript 为什么谷歌地图在两点之间显示错误的持续时间?,javascript,google-maps,google-maps-api-3,google-directions-api,Javascript,Google Maps,Google Maps Api 3,Google Directions Api,我的地图上有4个不同的点。但它对所有腿的反应时间基本相同。我想不要用流量来估计。例如,在谷歌地图中,我检查两点持续时间。有时显示1小时8分钟,有时显示1小时7分钟。但在我的项目中总是58分钟。如何解决此问题并正确显示持续时间 function calculateAndDisplayRoute(directionsService,directionsRenderer, map, myCompany, companies) { var waypts = [];

我的地图上有4个不同的点。但它对所有腿的反应时间基本相同。我想不要用流量来估计。例如,在谷歌地图中,我检查两点持续时间。有时显示1小时8分钟,有时显示1小时7分钟。但在我的项目中总是58分钟。如何解决此问题并正确显示持续时间

 function calculateAndDisplayRoute(directionsService,directionsRenderer, map, myCompany, companies) {
            var waypts = [];

            for (var i = 0; i < companies.length; i++) {
                waypts.push({
                    location: companies[i].Address,
                    stopover: true
                });
            }
            directionsService.route(
                {
                    origin: document.getElementById("start").title,
                    destination: document.getElementById("start").title,
                    waypoints: waypts,
                    optimizeWaypoints: true,
                    travelMode: "DRIVING",
                    drivingOptions: {
                        departureTime: new Date(Date.now()),
                        trafficModel: 'optimistic'
                    }
                },
                function (response, status) {
                    if (status === "OK") {
                        console.log("response = ", response)
                        directionsRenderer.setDirections(response);
                        var route = response.routes[0];
                        console.log("route = ", route);
                        renderDirectionsPolylines(response, map, myCompany, companies);

根据Google Maps Directions API服务的官方文档,只有在满足以下所有条件时,才会考虑交通信息:

行驶模式参数为行驶模式,或未指定行驶模式为默认行驶模式。 请求包含有效的出发时间参数。出发时间可以设置为当前时间或将来某个时间。这不可能是过去。 该请求不包括中途停留航路点。如果请求包括航路点,则在每个航路点前加上via:以影响路线,但避免中途停留。例如 &航路点=途经:旧金山|途经:山景|。。。 资料来源:

查看您的代码,我可以看到您使用的是中途停留航路点

waypts.push({
    location: companies[i].Address,
    stopover: true
});    
如果您想考虑实时交通状况,您应该将航路点的中途停留属性设置为false。但是,请注意,在这种情况下,您不能使用航路点优化,因为航路点优化仅适用于官方文件规定的中途停留:

默认情况下,方向服务按给定顺序计算通过所提供航路点的路线。或者,您可以将optimize:true作为waypoints参数中的第一个参数,以允许方向服务通过以更有效的顺序重新排列航路点来优化所提供的路线。这种优化是旅行推销员问题的一个应用。行程时间是优化的主要因素,但在决定哪条路线最有效时,可以考虑其他因素,如距离、转弯次数等。所有航路点必须是方向服务的中途站,以优化其路线

资料来源:

因此,您必须在交通条件和航路点优化之间进行选择。这两件事不可能同时进行。

请提供一个说明问题的链接,以及一个显示真实数据的谷歌地图链接。