Динамическое обновление маршрута с помощью JavaScript и Leaflet

Динамическое обновление маршрута с помощью JavaScript и Leaflet

Динамическое обновление маршрута с помощью JavaScript и Leaflet

Веб-карты стали неотъемлемой частью многих приложений, позволяя пользователям интерактивно работать с географической информацией. Одной из самых востребованных функций является построение маршрутов, которые могут обновляться в реальном времени в зависимости от действий пользователя. В этой статье мы рассмотрим, как создать карту с динамически обновляемым маршрутом с использованием JavaScript и Leaflet — мощной и легкой библиотеки для работы с картами.

Зачем обновлять маршрут?

Динамическое обновление маршрута полезно в различных приложениях:
Сервисы доставки и такси, где маршрут меняется в зависимости от текущего местоположения водителя и заказов.
Туристические приложения, где пользователи могут выбирать разные точки на карте и строить маршрут.
Навигационные системы, где маршрут автоматически обновляется с учетом текущих условий на дороге.

Leaflet предоставляет удобные инструменты для рисования маршрутов и их обновления. Давайте создадим пример, в котором пользователь выбирает начальную и конечную точки маршрута на карте.

Как выбрать точки на карте с помощью Leaflet?

Для реализации динамического маршрута с выбором точек на карте, мы будем использовать функцию клика на карту. Пользователь будет выбирать точки, и карта будет автоматически обновлять маршрут.

Полный код с выбором точек на карте

<!DOCTYPE html>

<html lang="ru">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Выбор точек на карте с Leaflet</title>

    <!-- Подключаем стили Leaflet -->

    <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" />

    <style>

        #map {

            height: 500px; /* Высота карты */

            width: 100%; /* Ширина карты */

        }

    </style>

</head>

<body>



    <!-- Контейнер для карты -->

    <div id="map"></div>



    <!-- Подключаем скрипт Leaflet -->

    <script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>

    <script>

        let map, routeLayer, startMarker, endMarker;



        // Инициализация карты

        function initMap() {

            map = L.map('map').setView([55.7558, 37.6173], 12); // Центр карты - Москва



            // Добавляем слой карты OpenStreetMap

            L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {

                attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'

            }).addTo(map);



            // Инициализируем слой маршрута

            routeLayer = L.layerGroup().addTo(map);



            // Слушаем клик по карте

            map.on('click', function (event) {

                const latlng = event.latlng;



                // Если начальная точка не выбрана, ставим её

                if (!startMarker) {

                    startMarker = L.marker(latlng).addTo(map).bindPopup("Начальная точка").openPopup();

                } else if (!endMarker) {

                    // Если начальная точка есть, ставим конечную

                    endMarker = L.marker(latlng).addTo(map).bindPopup("Конечная точка").openPopup();

                    // После выбора конечной точки рисуем маршрут

                    updateRoute(startMarker.getLatLng(), endMarker.getLatLng());

                }

            });

        }



        // Функция для обновления маршрута

        function updateRoute(start, end) {

            // Очищаем старый маршрут

            routeLayer.clearLayers();



            // Рисуем маршрут между точками

            const route = L.polyline([start, end], { color: 'blue', weight: 4 }).addTo(routeLayer);



            // Обновляем карту, чтобы маршрут был виден

            map.fitBounds(route.getBounds());

        }



        // Инициализация карты

        initMap();

    </script>

</body>

</html>

Как это работает?

  1. Инициализация карты: Мы создаем карту, используя Leaflet, и устанавливаем ее центр в Москве. В качестве картографического слоя используется OpenStreetMap.
  2. Обработчик кликов: При клике на карту мы получаем координаты точки и ставим на ней маркер. Первый клик устанавливает начальную точку, а второй — конечную точку маршрута.
  3. Маршрут: После того как обе точки выбраны, рисуется линия маршрута между ними с помощью L.polyline(). Затем карта автоматически подстраивается, чтобы весь маршрут был виден.
  4. Маркер и всплывающее окно: Мы добавляем всплывающее окно на каждый маркер, чтобы пользователь знал, какую точку он выбрал.

Заключение

Создание динамического маршрута с использованием JavaScript и Leaflet позволяет легко и быстро добавить функциональность выбора точек и построения маршрутов на веб-страницу. Этот подход дает пользователю возможность выбирать начальные и конечные точки маршрута на карте, а карта автоматически обновляется и рисует новый маршрут.

Если вы хотите лучше понимать код JavaScript, рекомендую курс «Программирование на JavaScript с Нуля до Гуру 2.0″, где вы найдёте ещё больше полезных техник и приёмов!

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий