我需要计算用户和公司之间的距离。我只能在计算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上的任何内容。
答案 0 :(得分:0)
为什么必须为每个业务运行回调?
DistanceMatrixService正是您所需要的,但您必须正确使用它。
您可以在一个请求中定义最多25个企业,只需一个响应,您就可以获得从用户到所有企业的距离。