решение этой проблемы можно найти с помощью стандартных алгоритмов дискретной маршрутизации
этим алгоритмам необходим набор узлов (начало, пункт назначения, ваши города) и ребер между этими узлами (представляющих возможные дороги или, в более общем случае, расстояния между местоположениями.)
узлы и ребра образуют граф ... начальная точка и пункт назначения известны ... теперь вы можете использовать алгоритмы, такие как A * или djikstra, чтобы найти маршрут вдоль этого графа
типичная проблема для этого подхода может заключаться в том, что у вас нет определений для ребер (используемых прямых путей между местоположениями). Вы можете создать такую «дорожную сеть» различными способами, например:
инициализировать "Network_ID" с 0
выберите начальную точку и найдите ближайшую другую точку. измерить расстояние и умножить его на коэффициент. Теперь подключите каждое местоположение к исходному местоположению, которое имеет расстояние меньше этого значения и еще не связано с текущим местоположением. добавьте в список все местоположения, которые были связаны этим шагом. пометьте текущее местоположение текущим «Network_ID», повторите этот шаг для следующего местоположения в этом списке. если в вашем списке нет мест, увеличьте «Network_ID» и выберите случайное местоположение, которое еще не было обработано, и повторите шаг
после того, как все местоположения были обработаны, у вас есть одна или несколько дорожных сетей (если их несколько, они еще не подключены. Добавьте между ними подходящий край соединения или перезапустите процесс с большим коэффициентом)
Вы должны убедиться, что у отправителя и пункта назначения одинаковые идентификаторы сети, или что обе сети были подключены