Берешь готовые и делаешь.
Хочешь свой собственный?
Ну там как было:
Создаешь карту, создаешь векторные маршруты банальным заданием каждой точки или рисованием, потом определяешь две точки - откуда куда. В обеих точках задача определить минимальное расстояние от точки до ближайшего маршрута.
Маршруты у тебя заданы с километражом. Отмеряешь длину маршрута в процентах от всего маршрута, умножаешь. Но геморно это все, проще взять гугльмап и приспособить, зачем тебе сдалось заново все рисовать?
А никак, зачем тебе на бекенде это делать то?
Они могут работать на крутой штуке типа "нод js" которая в реальном времени работает.
Полный список можешь грузануть откуда-то еще. А потом как делаешь - человек выбрал из списка город, ты его пытаешься найти на яндексе на фронтенде. Фронтендом же проверяешь - найдено ли точное соответствие.
Там как-то есть хитрая система запросов с callback-ами, что в гугле, что в яндексе. И запрашивать на пыхе каким-нибудь курлом или через file_get_contents. Но только зачем ты себе голову морочишь?