0

jQuery データテーブルに都市のリストを表示する Web ページがあります。与えられた 1 つの場所から各都市までの距離を計算し、結果をテーブルに入れる必要があります。テーブルの行をループして Google の DistanceMatrix を呼び出し、コールバック関数で結果を正しく読み取ることができます。ただし、コールバックでは、計算された距離で jQuery データテーブルの列を更新する必要があります。結果は非同期に (結果とステータスのみをパラメーターとして) 到着するため、戻り配列のどの結果がどのデータテーブル行に適用されるかをどのように判断すればよいでしょうか?

各結果要素で返された都市のデータテーブルを検索できると思いますが、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);
                }
            }
        }
    })
);
4

1 に答える 1

0

応答には、要求内で使用される起点と終点の順序が反映されます。

したがって、rows 内のインデックスを使用して起点内の関連アドレスを取得し、rows.elements 内のインデックスを使用して宛先内の関連アドレスを取得できます。

コールバック内で使用されるループ内では、destinations[j]宛先から使用された宛先が返されます。

于 2012-03-24T00:32:36.730 に答える