Класс Marker представляет собой базовый элемент для отображения точечных объектов на карте. Он служит визуальным представлением географической координаты и является одним из наиболее часто используемых объектов при работе с интерактивными картами. Marker не только отображает позицию, но и поддерживает взаимодействие, стилизацию, анимации и привязку всплывающих элементов.
Основная форма создания маркера заключается в передаче координат и, при необходимости, объекта настроек:
const marker = L.marker([51.505, -0.09]);
Координаты задаются в формате [lat, lng], где:
lat — широтаlng — долготаДополнительно можно передать объект опций:
const marker = L.marker([51.505, -0.09], {
title: 'Точка интереса',
opacity: 0.9,
draggable: true
});
Позволяет задать пользовательскую иконку:
const customIcon = L.icon({
iconUrl: 'marker.png',
iconSize: [32, 32],
iconAnchor: [16, 32]
});
const marker = L.marker([51.5, -0.09], { icon: customIcon });
Включает возможность перетаскивания:
const marker = L.marker([51.5, -0.09], {
draggable: true
});
Определяет прозрачность маркера:
const marker = L.marker([51.5, -0.09], {
opacity: 0.6
});
Управляет порядком наложения маркеров:
const marker = L.marker([51.5, -0.09], {
zIndexOffset: 1000
});
Поднимает маркер при наведении:
const marker = L.marker([51.5, -0.09], {
riseOnHover: true
});
Маркер отображается только после добавления на карту:
marker.addTo(map);
или альтернативно:
map.addLayer(marker);
const position = marker.getLatLng();
Возвращает объект вида:
{ lat: 51.505, lng: -0.09 }
marker.setLatLng([51.51, -0.1]);
Также можно передать объект:
marker.setLatLng({ lat: 51.51, lng: -0.1 });
marker.setIcon(customIcon);
Иконка может быть изменена динамически, что используется для визуального отображения состояния объекта.
Если включён draggable: true, доступен набор событий и
методов.
marker.on('dragstart', function () {
console.log('Начало перемещения');
});
marker.on('dragend', function () {
const position = marker.getLatLng();
console.log('Новая позиция:', position);
});
marker.dragging.enable();
marker.dragging.disable();
marker.bindPopup('Информация о точке');
Открытие:
marker.openPopup();
marker.bindTooltip('Подсказка');
Tooltip отображается при наведении или всегда (в зависимости от настроек).
Marker поддерживает широкий набор событий.
marker.on('click', function () {
console.log('Маркер нажат');
});
marker.on('mouseover', function () {
console.log('Наведение на маркер');
});
marker.on('mouseout', function () {
console.log('Уход курсора');
});
Срабатывает при изменении позиции:
marker.on('move', function () {
console.log('Маркер перемещён');
});
marker.on('popupopen', function () {
console.log('Popup открыт');
});
marker.on('popupclose', function () {
console.log('Popup закрыт');
});
map.removeLayer(marker);
или:
marker.remove();
map.hasLayer(marker);
Изменение прозрачности динамически:
marker.setOpacity(0.5);
Это позволяет создавать эффекты активации, деактивации или фильтрации объектов.
Marker часто используется совместно с группами:
const group = L.layerGroup();
group.addLayer(L.marker([51.5, -0.09]));
group.addLayer(L.marker([51.51, -0.1]));
group.addTo(map);
Это позволяет управлять множеством точек как единым объектом.
Позволяет использовать HTML вместо изображения:
const divIcon = L.divIcon({
html: '<div class="custom-marker"></div>',
className: ''
});
const marker = L.marker([51.5, -0.09], { icon: divIcon });
Такой подход используется для сложной стилизации через CSS.
Marker не имеет встроенной сложной анимации, но изменение координат может быть использовано для создания плавного движения:
function moveMarker(marker, newLatLng) {
marker.setLatLng(newLatLng);
}
Для плавных эффектов часто применяется интерполяция координат с таймерами.
При работе с десятками тысяч объектов Marker становится ресурсоёмким. В таких случаях применяются:
Marker может сочетаться с:
Пример совместного использования:
L.polyline([
[51.5, -0.09],
[51.51, -0.1]
]).addTo(map);
L.marker([51.505, -0.09]).addTo(map);
Marker наследуется от Layer, что означает:
addTo/removeВизуально Marker реализован через DOM-элемент, позиционируемый относительно контейнера карты, что обеспечивает точное соответствие географическим координатам.