Более быстрый способ рассчитать расстояние до многих точек

Я пытаюсь рассчитать расстояние вождения от одной исходной точки, а затем до множества различных пунктов назначения (мне нужно найти ближайшего водителя).
Я использую 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 секунд.

Есть ли более быстрый способ? или сервис?

Желаю всем отличного дня.

с уважением

0

Решение

Ну, ИМО у вас есть 3 возможности:

1) Придерживайтесь php и используйте pthreads, вы можете обработать один запрос на поток и сократить время работы вашего скрипта. Посмотри на этот

2) перейдите «async» и используйте один http-запрос для каждого драйвера, поэтому сначала получите список драйверов, а затем отправьте запрос для каждого драйвера. Это может включать в себя внешний интерфейс, способный выполнять javascript (браузер).

3) использовать для этой цели другую технологию, которая является неблокирующей, например, nodejs. Используя обещания, вы можете сделать это легко:

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

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

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

Посмотрите здесь!

0

Другие решения

Я начал с nodejs, и он тоже это сделал. Однако мне удалось найти еще более умный путь.
После более интенсивного чтения Google может сделать это за вас.

Можно ввести один источник и несколько пунктов назначения.
Истоки = латы, LNG&направления = LAT1, lng1 | LAT2, lng2 | … Latn, lngn&

просто используйте | разделить направления.

Я пошел с 51 секунды до 2 секунд.

0

По вопросам рекламы [email protected]