将Google MapsMatrix的结果存储到原始 - 目的地对列表中

时间:2012-03-23 16:49:23

标签: javascript google-maps google-maps-api-3 callback jquery-datatables

我有一个网页,显示jQuery数据表中的城市列表。我需要从一个给定的位置计算每个城市的距离,并将结果放入表中。我能够循环遍历表格的行并调用Google的DistanceMatrix,然后在回调函数中正确读取结果。但是,在回调中,我需要使用计算的距离更新jQuery数据表中的列。由于结果是异步到达的(只有结果和状态为params),我如何确定返回数组中的哪个结果适用于哪些数据表行?

我想我可以搜索我的数据表中每个结果元素中返回的城市,但是在返回之前,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 :(得分:0)

响应反映了请求中使用的起源和目的地的顺序。

因此,您可以使用行内的索引来获取origin中的相关地址,以及rows.elements中的索引以获取目标内的相关地址。

在回调destinations[j]内使用的循环内部将从目的地返回已使用的目的地。