Google将方向从一个起点映射到多个终点

时间:2017-04-21 09:29:31

标签: javascript google-maps

我在地图上有一个起点坐标。我有多个(100)端点来计算从起点到终点的总距离。 起点是我的办公室,终点是我客户的位置。我想计算总距离。

我在javascript上使用for循环

for (var i = 0; i < destinations.length; i++) {

    var request = {
        origin: "60.758447, 69.385923",
        destination: destinations[i],
        travelMode: google.maps.DirectionsTravelMode.DRIVING
    };

    directionsService.route(request, function (response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            var directionsDisplay = new google.maps.DirectionsRenderer();
            directionsDisplay.setMap(map);
            directionsDisplay.setDirections(response);
            totalKM = totalKM + (response.routes[0].legs[0].distance.value / 1000);
            distanceInput.value = totalKM;
            console.log(totalKM)
        }
    });

};

但是这个循环只能工作10个目的地。我可以在控制台日志中看到这一点。谷歌会限制查询限制吗?

1 个答案:

答案 0 :(得分:0)

在其中一篇评论中,提到了距离矩阵API。我建议这样做,因为你只有一个来源和多个目的地。使用路线API,您只能拥有一个原点和目的地对,但使用距离矩阵API,您可以拥有多个目的地和原点。距离矩阵API还允许每个请求100个元素(number_of_elements = number_of_origins * number_of_destinations)。这将允许您在一个请求中拥有一个源和100个目标。请参阅此处的使用限制:

https://developers.google.com/maps/documentation/distance-matrix/usage-limits

当您从API获得响应时,您可以通过以下方式获取每个元素的距离:

for(i = 0; i < response.rows[0].elements.length; i++){
    totalDistance += response.rows[0].elements[i].distance.value;
}

它是行数组中的元素0,因为你只有一个原点,如果你有多个原点,你需要循环遍历多行。

我还修改了文档中的一个Google Distance Matrix API示例,以总结3个目的地与一个来源的距离,以及演示如何工作。唯一的区别是在你的应用程序中你会有更多的目的地,但逻辑应该是相同的。请注意,为了安全起见,我从我的小提琴中取出了我的API密钥,请输入您自己的样本以便工作:

https://jsfiddle.net/o0wyq4bo/1/

我希望这有帮助!