Javascript 使用google direction API的目的地阵列

Javascript 使用google direction API的目的地阵列,javascript,google-maps-api-3,google-directions-api,Javascript,Google Maps Api 3,Google Directions Api,我是javascript新手,我对google directions有一个问题: 我有一个包含不同位置坐标的表格,如: lieux = [ {"nom": "place1", "icon": "galerie.png", "coordinates": [46.2018773, 6.1396896]}, {"nom": "place2", "icon": "galerie.png", "coordinates": [46.1989726, 6.1371983]}, {"no

我是javascript新手,我对google directions有一个问题:

我有一个包含不同位置坐标的表格,如:

lieux = [
    {"nom": "place1", "icon": "galerie.png", "coordinates": [46.2018773, 6.1396896]},
    {"nom": "place2", "icon": "galerie.png", "coordinates": [46.1989726, 6.1371983]},
    {"nom": "place3", "icon": "galerie.png",    "coordinates": [46.1976313, 6.1382951]},
    {"nom": "place4", "icon": "galerie.png", "coordinates": [46.1997394, 6.1388766]}
];
我想为每个地方创建一个方向按钮来计算到它的行程。这是计算路径的函数,它位于initialiser()之外

函数错误函数(错误){
console.log(错误);
};   
功能成功功能(位置){
myLatitude=位置坐标纬度;
我的经度=位置坐标经度;
};
calcul_itin=函数(){
原点=Mylatude+“,”+myLongitude;
对于(i=0;i

但是,每个按钮都会计算表中最后一个位置的行程,我不知道如何安排我的代码来更改它。

您不断为每个新请求覆盖DirectionService。在服务器返回请求之前,您无法覆盖它。因此,要么链接您的请求(在前一个请求完成时调用下一个请求),要么为每个请求创建一个单独的DirectionsService对象

请注意:

  • 受利率限制
  • 有配额限制
  • 是异步的,需要与服务器交互。当响应从服务器返回时,回调将运行

  • 如果我理解正确,您需要计算从一个位置到多个目的地的最短(或最快)路径,并且您需要有详细的路径信息,以便在地图上实际显示这些路径

    我认为你的问题是,你只要求一次从出发地到目的地列表中最后一个目的地的旅行。所有其他目的地都被覆盖,因为对方向服务的请求位于通过目的地的循环之后。您需要使用自己的实现或单独的DirectionsRenderer为每次旅行发出单独的请求,并且每个方向的结果都需要单独呈现。因此,对方向服务的调用需要位于
    for
    循环内。您还需要管理渲染器,因为您可能希望在新调用
    calcul\u itin
    时删除旧的渲染器

    下面的代码说明了这种方法。也许,你会想要个性化的路径和标记

    var directionRenderers = [];    // array for keeping track of renderers
    calcul_itin = function(origin) {
        // Remove previous renderers
        for (var i=0; i < directionRenderers.length; i++) {
            directionRenderers[i].setMap(null);
        }
        directionRenderers = [];
        // create a request for each destination
        for (i = 0; i < lieux.length; i++) {    // guess destinations are in lieux...
            var dest = lieux[i].coordinates[0] +','+ lieux[i].coordinates[1];
            var request = {
                origin: origin,     // assume origin is an instance of google.maps.LatLng
                destination: dest,
                travelMode: google.maps.DirectionsTravelMode.WALKING
            };
            var directionsService = new google.maps.DirectionsService(); 
            directionsService.route(request, function(response, status){                    
                if(status == google.maps.DirectionsStatus.OK){
                    // create a new DirectionsRenderer for this route
                    var dirRenderer = new google.maps.DirectionsRenderer({map: map});
                    dirRenderer.setDirections(response);
                    directionRenderers.push(dirRenderer);   // track the renderers
                }
            });
        }
    };
    
    var directionrenders=[];//用于跟踪渲染器的数组
    计算=函数(原点){
    //删除以前的渲染器
    对于(var i=0;i
    还要注意的是,它有配额和速率限制,并且上面的方法会对此服务发出许多请求,因此请注意不要使用太多的目的地


    如果您只需要多个起点/目的地的距离和旅行时间,最好使用。但是,在这种情况下,您将无法获得详细的路径信息。

    请看一看,我几次前问了一个类似的问题,它可以帮助您:
    var directionRenderers = [];    // array for keeping track of renderers
    calcul_itin = function(origin) {
        // Remove previous renderers
        for (var i=0; i < directionRenderers.length; i++) {
            directionRenderers[i].setMap(null);
        }
        directionRenderers = [];
        // create a request for each destination
        for (i = 0; i < lieux.length; i++) {    // guess destinations are in lieux...
            var dest = lieux[i].coordinates[0] +','+ lieux[i].coordinates[1];
            var request = {
                origin: origin,     // assume origin is an instance of google.maps.LatLng
                destination: dest,
                travelMode: google.maps.DirectionsTravelMode.WALKING
            };
            var directionsService = new google.maps.DirectionsService(); 
            directionsService.route(request, function(response, status){                    
                if(status == google.maps.DirectionsStatus.OK){
                    // create a new DirectionsRenderer for this route
                    var dirRenderer = new google.maps.DirectionsRenderer({map: map});
                    dirRenderer.setDirections(response);
                    directionRenderers.push(dirRenderer);   // track the renderers
                }
            });
        }
    };