使用具有多个位置的Google地图优化距离计算

时间:2016-02-18 18:09:39

标签: javascript angularjs google-maps google-maps-api-3

我需要计算用户和公司之间的距离。我只能在计算1个用户和1个商家之间的距离时才能做到这一点。但是在我的应用的搜索视图中,我必须计算1个用户和多个业务之间的距离。

例如,用户已登录并拥有有效地址。然后,用户进入搜索页面以寻找商店以购买一些鞋子。在此页面上,结果需要具有用户位置与结果上所有业务之间的距离。所以我会有这样的事情:

user <--> businness 1 = 800m
user <--> businness 2 = 1.650m
user <--> businness 3 = 5.2m
user <--> businness 4 = 1.2m

我能够进行此计算,但使用它的方法并不快。进行所有计算需要花费太多时间。

这是我使用的代码:

function checkDistance() {

    var splitUser   = user.map.split(','),
        userLat     = parseFloat(splitUser[0]),
        userLng     = parseFloat(splitUser[1]),

        splitBusi   = busi.map.split(','),
        busiLat      = parseFloat(splitBusi[0]),
        busiLng      = parseFloat(splitBusi[1]);

    var origin      = new google.maps.LatLng(userLat,userLng),
        destin      = new google.maps.LatLng(busiLat,busiLng);

    var service     = new google.maps.DistanceMatrixService();
        service.getDistanceMatrix({
            origins: [origin],
            destinations: [destin],
            travelMode: google.maps.TravelMode.DRIVING
        }, callback);

    function callback(response, status) {
        if (status == google.maps.DistanceMatrixStatus.OK) {
            var origins = response.originAddresses;
            for (var i = 0; i < origins.length; i++) {
                var results = response.rows[i].elements;
                for (var j = 0; j < results.length; j++) {
                    var distance        = results[j].distance.text,
                        finalDistance   = distance.split(' ')[0].replace(',', '.');
                    return finalDistance;
                };
            };
        };
    };
}

有没有办法优化此计算?甚至其他方法呢? 因为我必须为每个业务运行此函数,并且每次运行此函数时,返回值需要1-2秒。 我正在使用AngularJs 1.x应用程序,所以它可以是JS或Angular上的任何内容。

1 个答案:

答案 0 :(得分:0)

为什么必须为每个业务运行回调?

DistanceMatrixService正是您所需要的,但您必须正确使用它。

您可以在一个请求中定义最多25个企业,只需一个响应,您就可以获得从用户到所有企业的距离。