代码之家  ›  专栏  ›  技术社区  ›  SorenPeter

计算多点行驶距离的更快方法

  •  0
  • SorenPeter  · 技术社区  · 7 年前

    我试图计算从一个起点到多个不同目的地的行驶距离(我需要找到最近的驾驶员)。 我使用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 回复  |  直到 7 年前
        1
  •  0
  •   Philipp Wrann    7 年前

    嗯,在我看来,你有三种可能性:

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

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

    3) 为此,请使用另一种技术,即非阻塞技术,如nodejs。使用承诺,您可以轻松做到这一点:

    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
  •  0
  •   SorenPeter    7 年前

    我确实是从nodejs开始的,这也做到了。然而,我设法找到了一个更聪明的方法。 在阅读更密集之后,谷歌实际上可以帮你做这件事。

    可以输入一个起点和多个目的地。 起源=lat、lng和;目的地=lat1、lng1 | lat2、lng2 |。。。latn、LGN和;

    只需使用|来划分目的地。

    我从51秒变为2秒。