Я пытаюсь рассчитать расстояние вождения от одной исходной точки, а затем до множества различных пунктов назначения (мне нужно найти ближайшего водителя).
Я использую 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 секунд.
Есть ли более быстрый способ? или сервис?
Желаю всем отличного дня.
с уважением
Ну, ИМО у вас есть 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);
});
Я начал с nodejs, и он тоже это сделал. Однако мне удалось найти еще более умный путь.
После более интенсивного чтения Google может сделать это за вас.
Можно ввести один источник и несколько пунктов назначения.
Истоки = латы, LNG&направления = LAT1, lng1 | LAT2, lng2 | … Latn, lngn&
просто используйте | разделить направления.
Я пошел с 51 секунды до 2 секунд.