Карты в вебе: Leaflet.js
Aug 21, 2017 · 5 min read
Leaflet — это опенсорсная библиотека для интерактивных карт. Она весит всего около 38 КБ, но при этом имеет много разных плюшек, которые придутся по вкусу любому разработчику. В данных момент последнее обновление v1.2.0 было выпущено 8 августа 2017г. Первая версия библиотеки (v1.0) датируется сентябрем 2016г.
Desktop: Chrome, Firefox, Safari 5+, Opera 12+, IE 7–11, Edge
Mobile: Safari for iOS 7+; Android browser 2.2+, 3.1+, 4+; Chrome for mobile; Firefox for mobile; IE10+ for Win8 devices
Для работы с картой достаточно подключить библиотеку, стили и задать контейнер:
В то же время инициализация карты не доставит особых проблем:
Дл я инициализации нужно обязательно задавать зум и центр карты, без них вы получите ошибку. В то же время можно определить дополнительные опции — макс/мин зум, система координат, слои и т.п.
Эти простые манипуляции проинициализируют вам карту, но она будет обычным серым блоком с возможностью зума. Чтобы задать карте тайлы используется метод L.tileLayer. Библиотека позволяет задавать любые тайлы, которые вы найдете или сделаете сами. Менять их в процессе работы также довольно просто.
Что касается тайлов Google Maps и Яндекс Карт — вы можете попробовать задавать тайлы так же. Это будет работать, но политика обоих сервисов разрешает использование тайлов только через их API.
Для работы с гугл картами можно использовать плагин GoogleMutant.
Маркеры — чуть ли не основное, что нужно в картах.
На них можно вешать события (click, drag и т.п.), а так же задавать им кастомные иконки.
При создании иконки таким образом, в блоке карты создается тег
Создание маркера с кастомной иконкой и добавление его на карту выглядят таким образом:
Своей кластеризации у Leaflet нет, но можно использовать сторонний плагин Leaflet.markercluster.
Все внутри карт построено и держится на слоях — маркеры, точки, кластеры, фигуры и т.п. Можно создавать сколько угодно слоев и добавлять/удалять их по мере необходимости.
Добавлять слои на карту и удалять их с карты можно несколькими способами:
Leaflet дает возможность создавать несколько типов фигур — окружности, многоугольники, треугольники, линии (а так же при желании создавать на карте svg или использовать canvas).
В опциях, как по мне, не хватает только одного свойства — обводки линии ( polyline). И чтобы ее сделать вам придется отрисовать 2 линии — одну сверху, другую под ней.
Для работы с фигурами используются точки вида LatLng. Но библиотека позволяет использовать несколько типов точек.
События можно вешать как на карту
так и на любой элемент в документе
В принципе, вы можете обходиться без jQuery, библиотека поддерживает большинство методов
Для создания анимации используется класс L.PosAnimation.
Можно отслеживать все состояния анимации — начало, шаги и конец, но на практике мне пригодилось только окончание. Все эти состояния совершенно не информативны, присылают по сути только начальные время и точку анимации, хотя хотелось бы, например, время и точку текущего шага. Но не свезло.
Так же стоит учитывать, что конечная точка анимации задается точкой на экране, а не на карте. При зуме обновления позиции точки так же не происходит — все это придется высчитывать самому.
У библиотеки есть возможность конвертировать точки с карты на экран и обратно, получать текущую позицию html-элемента на карте и определять дистанцию между любым типом точек
Если вам лень писать свою реализацию анимации, можно взять один из готовых плагинов, например Leaflet.AnimatedMarker.
L.Control — это базовый класс для реализации управления картой. Что бы это ни значило 🙂
На самом деле все довольно просто. Контролы — это элементы управления картой (например, один из стандартных контролов — зум).
Используя расширение этого класса, вы можете создавать свои контролы.
При инициализации выполняется функция onAdd, в которой вы можете создавать элементы и манипулировать DOM и картой.
Простой способ расширить функциональность Leaflet — использование сторонних плагинов. У библиотеки довольно большое сообщество и есть плагины практически на все случаи жизни.
Если нужного плагина нет — вы можете сделать свой 🙂
Немного примеров использования библиотеки можно посмотреть здесь.
Знакомимся с открытой JS-библиотекой для интерактивных карт — Leaflet
В этой заметке я хочу познакомить Вас с JavaScript-библиотекой для интерактивных карт Leaflet.
Библиотека была создана в 2011 году Владимиром Агафонкиным (Vladimir Agafonkin) с командой профессиональных разработчиков.
Последняя версия, на момент написания заметки — 0.5.1 от 6 февраля 2013 года
Перечислю основные особенности библиотеки:
— возможность работы в браузерах мобильных устройств, так и в браузерах настольных ПК;
— небольшой размер самой библиотеки — 28 кб;
— наличие хорошо документированного API (ознакомитсься с API);
— функциональность может быть расширена, за счет подключения дополнительных плагинов.
Теперь рассмотрим некоторые примеры использования Leaflet.
Для начала загружаем последнюю версию библиотеки с официального сайта http://leafletjs.com из раздела Download
Распакуем, скаченный архив.
Для работы нам будет нужно содержимое папки dist.
Копируем папку полностью на сервер, например в папку js.
И в разделе HEAD наших примеров тогда нужно прописать код:
Также можно последний стабильный релиз библиотеки расположен на CDN
Для его использования в раздел HEAD нужно написать код следующего содержания:
Первый пример — выводим карту OpenStreetMap
Для этого в разделе HEAD добавляем код для стилей окна с картой:
А в раздел BODY – код:
В начале, мы добавляем область для отображения карты
А далее идет JavaScript-код
Мы определяем новую карту, задаем координаты центра и уровень масштаба
var map = L.map(‘map’).setView([56.326944, 44.0075], 12);
Затем добавляем слой тайлов карты OpenStreetMap
Передаем два параметра:
http://.tile.openstreetmap.org/
attribution — строка для описания источника слоя данных
Можно использовать и другой источник тайлов для карты, например Cloudmade.
Об этом сервисе у меня на блоге уже были заметки.
Нужно просто заменить код для источника тайлов на следующий:
В нем API-key — это ключ к API сервиса Cloudmade, для его получения необходима регистрация
Второй пример — добавляем маркер на нашу карту
Сделать это очень просто, для это нужно добавить код
Если мы хотим, чтобы с меткой отображался балун с информацией, наш код нужно немного изменить.
В параметре bindPopup мы прердаем html-код содержимого балуна, а параметр openPopup() служит для его открытия.
Третий пример — задаем собственную иконку для обозначения маркера
В начале мы задаем параметры для нашей иконки
shadowUrl — файл с изображением для тени иконки;
iconSize — размер иконки;
shadowSize — размер тени иконки;
iconAnchor — отступ от точки привязки для иконки изображения;
shadowAnchor — отступ от точки привязки для тени иконки;
popupAnchor — — отступ от точки привязки для балуна
Затем определяем файл с изображением для каждого из видов иконок
После этого добавляем иконки на нашу карту
L.marker([56.3271,44.0074],
Адрес: Минина и Пожарского площадь, 11″).addTo(map); L.marker([56.3193,44.0269],
Адрес: ул. Белинского, 124″).addTo(map); L.marker([56.3247,44.0092],
Адрес: ул. Варварская, 8″).addTo(map);
Кроме маркеров, мы можем размещать на карте различные геометрические фигуры: полилинии, полигоны, прямоугольники, окружности, использовать окружности в виде маркеров.
Рассмотрим пример добавления полилинии.
Для этого нам необходимо к коду самого первого примера добавить следующий код:
Здесь в начале мы передаем массив координат вершит полилинии.
Затем определяем ее свойсва:
color: ‘red’ — цвет (красный);
weight: 3 — толщину;
opacity: 0.5 — степень прозрачности (задается от 0 до 1);
smoothFactor: 1 — задает степень упрощения отображения на каждом уровне масштаба ( чем больше — означает лучшую производительность и гладкий вид, и меньше — более точное представление.)
Для того, чтобы наша полилиния полностью показывалась на карте, нужно добавить еще одну строку кода
Еще один пример, добавление на карту данных в формате GeoJSON
GeoJSON (http://www.geojson.org/) — формат представления различных структур географических данных. Объект GeoJSON может быть представлен геометрией (geometry), объектом (feature) или коллекцией объектов (feature collection). GeoJSON поддерживает следующие геометрические типы: Point (точка), LineString (ломаная), Polygon (полигон), MultiPoint (мультиточка), MultiLineString (мультиломаная), MultiPolygon (мультиполигон) и GeometryCollection (коллекция геометрий). Объект (feature) в GeoJSON состоит из геометрии и дополнительных свойств, коллекция объектов (feature collection) – из набора объектов (feature).
Подробнее с описанием формата GeoJSON можно познакомиться здесь.
И так у нас есть файл в фрмате GeoJSON с описанием некоторых географических данных (районов Нижегородской области) — noblast.js
Выведем его на карту.
Для этого в раздел HEAD добавляем строку
Присоединяем наш файл с данными.
А после добавления источника тайлов карты код
function onEachFeature(feature, layer) < var popupContent = "
I started out as a GeoJSON » + feature.geometry.type + «, but now I’m a Leaflet vector!
Рассмотрим несколько примеров использования плагинов для расширения функционала библиотеки Leaflet.
Со списком плагинов можно познакомиться здесь и здесь.
Давайте рассмотрим использование плагина Leaflet.markercluster для кластеризации маркеров на карте.
В месте с плагином идут и примеры использования в папке example
За основу берем код из первого примера.
В разделе HEAD после подключения файлов самой библиотеки Leaflet, подключаем файлы плагина
А затем файл с данными для кластеризации qiwi-nn.js
За вывод данных на карту отвечает следующий код:
var markers = new L.MarkerClusterGroup(); for (var i = 0; i Раздел: Обзоры Метки: Leaflet, обзор, примеры
Знакомимся с открытой JS-библиотекой для интерактивных карт — Leaflet : 1 комментарий
Доброго времени суток. Задам вопрос здесь, если можно.
Мне нужно подцепить на гугл(яндекс) карту свой слой. это границы объектов. как лучше реализовать?
знаю что можно на карте по координатам добавлять многоугольники и надписи. а можно ли сделать дополнительный пиксельный прозрачный слой с нужными элементами? есть ли инструменты для создания таких слоев?
JavaScript за 60 секунд: работаем с картой (Geolocation API, Leaflet.js, Nominatim)
Доброго времени суток, друзья!
В этом небольшом туториале мы вместе с вами выполним три простых задания:
Поиграть с кодом можно здесь:
Определяем текущее местоположение пользователя
Geolocation API позволяет пользователю предоставлять веб-приложению данные о своем местоположении. В приложении для запроса этих данных используется метод Geolocation.getCurrentPosition(). Данный метод принимает один обязательный и два опциональных параметра: success — функция обратного вызова, получающая объект Position при предоставлении разрешения, error — функция обратного вызова, получающая объект PositionError при отказе в доступе, и options — объект с настройками. Вот как это выглядит в коде:
Отображаем местоположение пользователя на карте
В качестве карты мы будем использовать Leaflet.js. Данный сервис является альтернативой Google Maps и OpenStreetMap, уступает им по функционалу, но подкупает простотой интерфейса. Создаем разметку, в которой подключаем стили и скрипт карты:
Добавляем минимальные стили (style.css):
Создаем модуль map.js следующего содержания:
Наконец, создаем script.js:
Открываем index.html в браузере, нажимаем на кнопку, предоставляем разрешение на получение данных о местоположении, видим нашу позицию на карте.
Отлично. Двигаемся дальше.
Анимированный переход между городами
Предположим, что у нас имеется объект с тремя городами (Москва, Санкт-Петербург, Екатеринбург) и их координатами (db/cities.json):
Нам необходимо реализовать плавное переключение между этими городами на карте.
Добавляем в разметку контейнер для городов:
Также немного изменим map.js:
Открываем index.html. При нажатии первой кнопки сразу получаем позицию и название города. При нажатии второй и последующих кнопок плавно перемещаемся между городами.
Плавное переключением между адресами
Предположим, что у нас имеются три объекта с названиями и адресами (db/addresses.json):
Нам необходимо реализовать переключение между этими объектами на карте. Но как нам это сделать без координат? Никак. Следовательно, нам каким-то образом нужно эти координаты получить. Для этого воспользуемся сервисом Nominatim от OpenStreetMap. О том, как правильно сформировать строку запроса, смотрите здесь. Я продемонстрирую лишь один из возможных вариантов.
Итак, создаем в разметке контейнер для адресов:
Открываем index.html. При нажатии первой кнопки сразу получаем позицию и название театра. При нажатии второй и последующих кнопок плавно перемещаемся между театрами.
Круто. Все работает, как ожидается.
На этом позвольте откланяться. Надеюсь, вы нашли для себя что-нибудь интересное. Благодарю за внимание и хорошего дня.
LeafletJS — Краткое руководство
Leaflet.js — это библиотека с открытым исходным кодом, с помощью которой мы можем развертывать простые, интерактивные и легкие веб-карты.
Библиотека JavaScript листовки позволяет использовать такие слои, как слои листов, WMS, маркеры, всплывающие окна, векторные слои (полилинии, многоугольники, круги и т. Д.), Наложения изображений и GeoJSON.
Вы можете взаимодействовать с картами Leaflet, перетаскивая карту, увеличивая масштаб (двойным щелчком или, прокручивая колесико), используя клавиатуру, используя обработку событий и перетаскивая маркеры.
Leaflet поддерживает такие браузеры, как Chrome, Firefox, Safari 5+, Opera 12+, IE 7–11 на рабочем столе и такие браузеры, как Safari, Android, Chrome, Firefox для мобильных устройств.
Библиотека JavaScript листовки позволяет использовать такие слои, как слои листов, WMS, маркеры, всплывающие окна, векторные слои (полилинии, многоугольники, круги и т. Д.), Наложения изображений и GeoJSON.
Вы можете взаимодействовать с картами Leaflet, перетаскивая карту, увеличивая масштаб (двойным щелчком или, прокручивая колесико), используя клавиатуру, используя обработку событий и перетаскивая маркеры.
Leaflet поддерживает такие браузеры, как Chrome, Firefox, Safari 5+, Opera 12+, IE 7–11 на рабочем столе и такие браузеры, как Safari, Android, Chrome, Firefox для мобильных устройств.
Действия по загрузке карты на веб-страницу
Следуйте приведенным ниже инструкциям, чтобы загрузить карту на свою веб-страницу —
Шаг 1. Создайте HTML-страницу
Создайте базовую HTML-страницу с тегами head и body, как показано ниже —
Шаг 2: Загрузите CSS-скрипт Leaflet
Включите CSS-скрипт Leaflet в пример —
Шаг 3: Загрузите скрипт листовки
Загрузите или включите Leaflet API с помощью тега script —
Шаг 4. Создайте контейнер
Чтобы удержать карту, мы должны создать элемент контейнера. Как правило, тег
Создайте элемент контейнера и определите его размеры.
Шаг 5: Параметры карты
В брошюре предусмотрено несколько параметров, таких как параметры «Типы управления», «Параметры взаимодействия», «Параметры состояния карты», «Параметры анимации» и т. Д. Задавая их значения, мы можем настроить карту по своему усмотрению.
Создайте объект mapOptions (он создается как литерал) и установите значения для центра параметров и масштабирования, где
center — в качестве значения этой опции вам нужно передать объект LatLng, указывающий место, где мы хотим центрировать карту. (Просто укажите значения широты и долготы в фигурных скобках [] )
zoom — в качестве значения этой опции вам нужно передать целое число, представляющее уровень масштабирования карты, как показано ниже.
center — в качестве значения этой опции вам нужно передать объект LatLng, указывающий место, где мы хотим центрировать карту. (Просто укажите значения широты и долготы в фигурных скобках [] )
zoom — в качестве значения этой опции вам нужно передать целое число, представляющее уровень масштабирования карты, как показано ниже.
Шаг 6: Создайте объект карты
В качестве параметра этой опции вам нужно передать переменную String, представляющую идентификатор DOM или экземпляр элемента
Необязательный литерал объекта с параметрами карты.
В качестве параметра этой опции вам нужно передать переменную String, представляющую идентификатор DOM или экземпляр элемента
Необязательный литерал объекта с параметрами карты.
Создайте объект Map, передав идентификатор элемента
Шаг 7: Создание объекта Layer
Создайте объект слоя плитки, как показано ниже.
Шаг 8: Добавить слой на карту
Наконец, добавьте слой, созданный на предыдущем шаге, к объекту карты, используя метод addlayer (), как показано ниже.
пример
В следующем примере показано, как загрузить открытую карту улиц города Хайдарабад со значением масштаба 10.
Он генерирует следующий вывод —
Поставщики листовок
В следующей таблице перечислены URL-адреса и соответствующие им примеры карт слоев, предоставляемых Openstreetmap.
| Тип карты | URL и вывод |
|---|---|
| Mapnik |













































