我只是想使用Google Maps API从 map 上的2个点获取距离。使用GDirections。问题在于函数完成后,距离始终为空。我知道这是因为直到函数完成后才调用“load”事件。事件监听器也不返回值,所以我很困惑!

有人知道我如何使该函数返回距离吗?也许有更好的方法来获取Google Maps API中2个点之间的距离?

function getDistance(fromAddr, toAddr) {
var distance;
var directions;

directions = new GDirections(null, null);
directions.load("from: " + fromAddr + " to: " + toAddr);

GEvent.addListener(directions, "load", function() {
    distance = directions.getDistance().html;
    distance = distance.replace(/&.*/, '');
});

return distance; //outputs null
}

最佳答案

GDirections加载是异步的。在触发加载事件之前,您将无法使用加载请求的结果。这意味着您的getDistance函数仅设置GDirections加载请求,它将无法同步(立即)获取请求的结果。 GDIrections对象必须消失,并向Google发出HTTP请求,以便它可以计算出两点之间的距离。

您需要做的是将使用距离的代码放入传递给加载请求的回调函数中:

GEvent.addListener(directions, "load", function() {
            // this is a callback function that is called after
            // the getDistance function finishes.
            var distance = directions.getDistance().html;

            // Have a distance now, need to do something with it.
            doSomethingWithTheDistanceWeGotBack (distance);
    });

这是一个使用GDirections负载的示例(获取行驶持续时间,而不是距离,但原理相同):

http://www.cannonade.net/geo.php?test=geo6

您可以在此处找到源:

http://www.cannonade.net/geo6.js

09-25 17:19