Сохранить результат Google карты DistanceMatrix в список пар отправления-назначения - PullRequest
0 голосов
/ 23 марта 2012

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

Полагаю, я мог бы найти в своей таблице данных город, возвращаемый в каждом элементе результата, но вызов 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);
                }
            }
        }
    })
);

1 Ответ

0 голосов
/ 24 марта 2012

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

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

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

...