【问题标题】:Faster way to calculate driving distance to many points计算到许多点的行驶距离的更快方法
【发布时间】:2018-05-18 20:02:57
【问题描述】:

我正在尝试计算从一个起点到许多不同目的地的行驶距离(我需要找到最近的司机)。 我使用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 秒。

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

祝大家有个美好的一天。

最好的问候

【问题讨论】:

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


    【解决方案1】:

    好吧,IMO 你有 3 种可能性:

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

    2) 使用“异步”并为每个驱动程序使用一个 http 请求,因此首先获取驱动程序列表,然后为每个驱动程序发送请求。这将涉及有一个能够执行 javascript(浏览器)的前端

    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!

    【讨论】:

      【解决方案2】:

      我确实从 nodejs 开始,并且确实做到了。但是我设法找到了一种更聪明的方法。 再深入阅读,google其实可以帮你搞定的。

      可以输入一个出发地和多个目的地。 起源=lat,lng&destinations=lat1,lng1|lat2,lng2|...latn,lngn&

      只需使用 |划分目的地。

      我从 51 秒缩短到 2 秒。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-27
        • 1970-01-01
        • 2015-05-11
        • 1970-01-01
        相关资源
        最近更新 更多