В общем, вы должны найти расстояние от заданной точки (ваш клиент) и полилинии (маршрут). Маршрут из ответа о направлениях Google разделен на ветви, а часть состоит из нескольких шагов ... На каждом шаге у вас есть массив путей [] (пара широты и долготы). Давайте назовем каждое местоположение в массиве path [] «Вершиной».
Вы должны выполнить итерацию по всем вершинам маршрута (получить все вершины со всех шагов в маршруте) и рассчитать расстояние между ломаной, созданной из текущих "наблюдаемых" вершин, и вашей POI (Точки интереса - Клиенты)
Наименьшее расстояние можно рассчитать, представив две вершины и местоположение клиента в виде nVector. После этого, выполнив Векторное произведение векторов, вы найдете кратчайшее (ортогональное) расстояние между точкой и ломаной
У меня недавно была похожая проблема, и я решил ее таким образом. Я понял идею из примеров Здесь (посмотрите на пример ТОЧКА РАССТОЯНИЯ ПОЛИЛИНУ ИЛИ ПОЛИГОНА Исходный код )
Если вы не понимаете, что такое математика, возможно, эта ссылка может помочь вам, объяснив концепцию Vector Cross Product . Также это также может помочь вам понять концепцию nVector.
Поскольку этот вид расчета расстояния занимает довольно много времени (если у вас много клиентских местоположений в базе данных), вам может быть интересно отфильтровать некоторые местоположения из базы данных и не выполнять для них вычисления ... посмотрите на мой ответ на этот вопрос о том, как выполнить фильтрацию по местоположениям на основе маршрута, который показан на карте.
Надеюсь, что это поможет и даст вам некоторое представление о том, как начать решать вашу проблему. Мне потребовалось много времени, чтобы понять это. Приветствия.