更快速地计算到多个点的行驶距离

时间:2017-12-05 08:15:05

标签: php distance latitude-longitude google-distancematrix-api

我正在尝试计算从一个原点然后到许多不同目的地点的驾驶距离(我需要找到最近的驾驶员)。 我使用PHP,我基本上多次运行此功能:

file_get_contents('https://maps.googleapis.com/maps/api/distancematrix/json?origins=' . $latitude . ',' . $longitude . '&destinations=' . $latitude1 . ',' . $longitude1 . '&mode=car&language=da-DK&key=My_API&alternatives=false&sensor=false');

我需要距离纬度,经度以及在某些情况下40多个不同潜在目的地的距离。 我的问题是,计算一次呼叫的多个点需要花费很长时间。找到从一个原点到37个不同潜在目的地点的距离需要51-56秒。

有更快的方法吗?还是服务?

祝大家一切顺利。

最好的问候

2 个答案:

答案 0 :(得分:0)

那么,IMO你有三种可能性:

1)坚持使用php并使用pthread,您可以为每个线程处理一个请求并减少脚本工作的时间。看看this

2)去" async"并且每个驱动程序使用一个http请求,因此首先获取驱动程序列表,然后发送每个驱动程序的请求。这将涉及有一个执行javascript(浏览器)的前端capeable

3)为此目的使用另一种技术,即无阻塞,如nodejs。使用promise可以轻松完成:

let urls = ["url1", "url2", "url3"];

asnyc doRequest(url) {
    // return promise...
}

Promise.all(urls.map(doRequest)).then(data => {
    console.log(data);
});

Have a look here

答案 1 :(得分:0)

我确实从nodejs开始,而且也做到了。然而,我设法找到一种更聪明的方式。 经过更加激烈的阅读,谷歌实际上可以为你做到这一点。

可以输入一个来源和多个目的地。 起源=纬度,经度和安培;目的地= LAT1,lng1 | LAT2,lng2 | ... LATN,lngn&安培;

只需使用|划分目的地。

我从51秒到2秒。