HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p><strong>В основном программисты занимаются автоматизацией. И эта статья про то, как автоматизировать поездки.</strong></p>
1 <p><strong>В основном программисты занимаются автоматизацией. И эта статья про то, как автоматизировать поездки.</strong></p>
2 <p>Доброго времени суток. На данный момент я работаю внутренним разработчиком в одной крупной компании. Это статья о том, как мы развозим в ночное время сотрудников, и какие технологии для этого используем.</p>
2 <p>Доброго времени суток. На данный момент я работаю внутренним разработчиком в одной крупной компании. Это статья о том, как мы развозим в ночное время сотрудников, и какие технологии для этого используем.</p>
3 <p>Разработкой инструмента занимался я один, и в свое время мне помог Хекслет. Когда начинающий разработчик делает первые шаги, он тратит очень много времени на то, чтобы узнать, что учить. А если учиться с наставником, или выбрать профессию на Хекслете и пролистать темы, станет понятным, что учить и как.</p>
3 <p>Разработкой инструмента занимался я один, и в свое время мне помог Хекслет. Когда начинающий разработчик делает первые шаги, он тратит очень много времени на то, чтобы узнать, что учить. А если учиться с наставником, или выбрать профессию на Хекслете и пролистать темы, станет понятным, что учить и как.</p>
4 <p>Это веб-инструмент, и на клиентской части используется VueJS. В программе<a>Фронтенд-разработчик</a>можно выучить React. Отличие VueJS и React не большие, но если вы хотите с шансом побольше найти работу, то учите React. Вакансий по нему больше. Серверная часть инструмента написана на NodeJS в связке с некоторыми библиотеками.</p>
4 <p>Это веб-инструмент, и на клиентской части используется VueJS. В программе<a>Фронтенд-разработчик</a>можно выучить React. Отличие VueJS и React не большие, но если вы хотите с шансом побольше найти работу, то учите React. Вакансий по нему больше. Серверная часть инструмента написана на NodeJS в связке с некоторыми библиотеками.</p>
5 <p>А теперь покажу инструмент и объясню, что и как работает.</p>
5 <p>А теперь покажу инструмент и объясню, что и как работает.</p>
6 <p>Для начала нам нужно определиться с контейнером для карт. Есть разные контейнеры. "Яндекс", Google. Но и есть бесплатные, например Leaflet. Leaflet - всего лишь контейнер, и не имеет самой карты. Но в связке с "Яндексом", Google, или OSM (Open Street Map) - это станет картой. Картой, которую мы привыкли видеть в интернете.</p>
6 <p>Для начала нам нужно определиться с контейнером для карт. Есть разные контейнеры. "Яндекс", Google. Но и есть бесплатные, например Leaflet. Leaflet - всего лишь контейнер, и не имеет самой карты. Но в связке с "Яндексом", Google, или OSM (Open Street Map) - это станет картой. Картой, которую мы привыкли видеть в интернете.</p>
7 <p>В моем проекте используются "Яндекс.Карты".</p>
7 <p>В моем проекте используются "Яндекс.Карты".</p>
8 <p>Для начала нужно выбрать город. (можете открывать фото в новой вкладке, чтобы было корректно видно).</p>
8 <p>Для начала нужно выбрать город. (можете открывать фото в новой вкладке, чтобы было корректно видно).</p>
9 <p>Город выбирается для серверной части. Потом нам нужно создать сотрудников или загрузить с Excel-файла.</p>
9 <p>Город выбирается для серверной части. Потом нам нужно создать сотрудников или загрузить с Excel-файла.</p>
10 <p>После чего нажимаем на кнопку "Найти сотрудников на карте" и сотрудники появляются на карте.</p>
10 <p>После чего нажимаем на кнопку "Найти сотрудников на карте" и сотрудники появляются на карте.</p>
11 <p>Но как карта узнает о сотрудниках? Для этого существует геокодинг. Дело в том, что у каждого сотрудника есть свой адрес. Инструмент обращается к "Яндексу" и спрашивает о координатах. "Яндекс" дает ответ, и все это отображается на картах.</p>
11 <p>Но как карта узнает о сотрудниках? Для этого существует геокодинг. Дело в том, что у каждого сотрудника есть свой адрес. Инструмент обращается к "Яндексу" и спрашивает о координатах. "Яндекс" дает ответ, и все это отображается на картах.</p>
12 <p>Заметьте, что у каждого сотрудника разное время.</p>
12 <p>Заметьте, что у каждого сотрудника разное время.</p>
13 <p>Сотрудник, который отвечал за развоз, тратил по 2-3 часа в среднем. Вы можете увидеть количество сотрудников. Жмем "Построить маршрут" и происходит та самая магия.</p>
13 <p>Сотрудник, который отвечал за развоз, тратил по 2-3 часа в среднем. Вы можете увидеть количество сотрудников. Жмем "Построить маршрут" и происходит та самая магия.</p>
14 <p>А вот пример конкретного времени. На изображении маршрут на 02.00. Вы можете посмотреть, маршрут действительно оптимальный.</p>
14 <p>А вот пример конкретного времени. На изображении маршрут на 02.00. Вы можете посмотреть, маршрут действительно оптимальный.</p>
15 <p>Как работает оптимизация? На серверной части используется NodeJS. Это мощный инструмент и на Хекслет есть профессия<a>Node.js-разработчик</a>.</p>
15 <p>Как работает оптимизация? На серверной части используется NodeJS. Это мощный инструмент и на Хекслет есть профессия<a>Node.js-разработчик</a>.</p>
16 <p>Сначала нужно построить матрицу расстояний. Матрица содержит расстояние от каждой точки до каждой точки. Откуда ее можно получить? Можно запросить у "Яндекса". Но дело в том, что это платно. Как и геокодинг, также платный. Мы решили сэкономить на матрице расстояний, и использовать OSRM Project. Эта библиотека, которой нужно скормить карты. Кормим ее с помощью OSM (Open Street Map) - там можно скачать любую часть мира. Но чем больше часть, тем больше места занимает в ОЗУ. Вся Россия примерно занимает 3ГБ. Но я скачал отдельно города и снизил до 200-мбайт.</p>
16 <p>Сначала нужно построить матрицу расстояний. Матрица содержит расстояние от каждой точки до каждой точки. Откуда ее можно получить? Можно запросить у "Яндекса". Но дело в том, что это платно. Как и геокодинг, также платный. Мы решили сэкономить на матрице расстояний, и использовать OSRM Project. Эта библиотека, которой нужно скормить карты. Кормим ее с помощью OSM (Open Street Map) - там можно скачать любую часть мира. Но чем больше часть, тем больше места занимает в ОЗУ. Вся Россия примерно занимает 3ГБ. Но я скачал отдельно города и снизил до 200-мбайт.</p>
17 <p>После получения матрицы нужно построить оптимальный маршрут. Этим занимается Google OR_TOOLS. На сайте OR_TOOLS сказано:<em>OR-Tools - это быстрое и портативное программное обеспечение для комбинаторной оптимизации.</em></p>
17 <p>После получения матрицы нужно построить оптимальный маршрут. Этим занимается Google OR_TOOLS. На сайте OR_TOOLS сказано:<em>OR-Tools - это быстрое и портативное программное обеспечение для комбинаторной оптимизации.</em></p>
18 <p>NodeJS запускает скрипт на Python. Он анализирует матрицу, решает и дает в ответе массив, в котором указана очередность путей. Это все снова возвращается к "Яндексу", и по координатам "Яндекс.Карты" строят маршрут, который мы увидели выше.</p>
18 <p>NodeJS запускает скрипт на Python. Он анализирует матрицу, решает и дает в ответе массив, в котором указана очередность путей. Это все снова возвращается к "Яндексу", и по координатам "Яндекс.Карты" строят маршрут, который мы увидели выше.</p>
19 <p>Теперь вы знакомы с тем, как решаются вопросы с оптимизацией.</p>
19 <p>Теперь вы знакомы с тем, как решаются вопросы с оптимизацией.</p>
20 <p>Необязательно все знать. Нужно просто знать, где найти.</p>
20 <p>Необязательно все знать. Нужно просто знать, где найти.</p>