0

У меня есть веб-страница, которая отображает список городов в jQuery datatable. Мне нужно рассчитать расстояние каждого города от одного заданного местоположения и поместить результат в таблицу. Я могу зациклиться на строках таблицы и сделать звонок в Google DistanceMatrix, а затем правильно проверить результаты в функции обратного вызова. Однако в обратном вызове мне нужно обновить столбец в jQuery datatable с вычисленным расстоянием. Поскольку результат поступает асинхронно (только с результатом и статусом в качестве параметров), как я могу определить, какой результат в массиве return применяется к какому из моих строк данных?Сохранить результат Google maps DistanceMatrix в список пар-отправителя-источника

Предполагаю, что я мог бы искать данные для города, возвращенные в каждом элементе результата, но вызов DistanceMatrix часто преобразовывал («геокодированный»?) Мои исходные параметры поиска в более конкретные строки местоположения перед возвратом.

Пример кода:

var origins = ["Portland, OR"]; 
    for (var i = 0; i < oTable.fnGetNodes().length; i++) { 
     //build a destinations array resembling the one spoofed in the next row 
     //assume < 25 entries or else batch processing 
    } 
    var destinations = ["Seattle, WA", "San Francisco, CA"]; 

    var service = new google.maps.DistanceMatrixService(); 
    service.getDistanceMatrix({ 
     origins: origins, 
     destinations: destinations, 
     travelMode: google.maps.TravelMode.DRIVING, 
     unitSystem: google.maps.DirectionsUnitSystem.IMPERIAL, 
     avoidHighways: false, 
     avoidTolls: false 
    }, (function (response, status) { 
     if (status == google.maps.DistanceMatrixStatus.OK) { 
      for (var i = 0; i < response.originAddresses.length; i++) { 
       var results = response.rows[i].elements; 
       for (var j = 0; j < results.length; j++) { 
        var distance = response.rows[0].elements[j].distance.text; 

        //how do I know which row number to update? Using j here doesn't match 
        //correctly on the order of rows. I could search my data table on city but 
        //result (coded) values frequently differ from my table data 

        //var rowNumberToUpdate = ??; 

        oTable.fnUpdate(distance, *rowNumberToUpdate*, column6); 
       } 
      } 
     } 
    }) 
); 

ответ

0

Ответ отражает порядок отправления и назначения, используемых в запросе.

Таким образом, вы можете использовать индекс внутри строк, чтобы получить связанный адрес внутри источника, и индекс внутри rows.elements, чтобы получить связанный адрес внутри адресатов.

Внутри цикла, используемого внутри обратного вызова destinations[j], вернет использованный пункт назначения из пункта назначения.

+0

Значения пунктов назначения [j], как представляется, не имеют правильной комбинации orig/dest в нем ... следовательно, мой вопрос. Однако, возможно, проблема существует в вызове oTable.fnGetNodes(), который я создаю для создания исходного массива ... возможно, это не сохраняет порядок ...? –

Смежные вопросы