В Leaflet работа с GeoJSON реализуется через фабрику
L.geoJSON, которая преобразует стандартный GeoJSON-объект в
интерактивный слой карты. Базовая структура слоя позволяет не только
отображать геометрию, но и привязывать поведение к каждому объекту.
const geoLayer = L.geoJSON(geojsonData, {
onEachFeature: function (feature, layer) {
layer.bindPopup(feature.properties.name);
}
});
Параметры конфигурации определяют поведение слоя на этапе создания:
onEachFeature — обработка каждого объектаstyle — стилизация геометрии (для LineString и
Polygon)pointToLayer — кастомизация отображения точекfilter — фильтрация объектов перед добавлениемcoordsToLatLng — преобразование координатМетод addData позволяет динамически добавлять новые
GeoJSON-данные в уже существующий слой без пересоздания объекта.
geoLayer.addData(newGeoJson);
Поведение метода:
style, filter,
onEachFeatureТипичный сценарий использования — подгрузка данных с сервера частями (lazy loading или pagination геоданных).
setStyle применяется для изменения визуального
оформления всех объектов слоя, поддерживающих стилизацию (Polygon,
Polyline).
geoLayer.setStyle({
color: 'blue',
weight: 3,
opacity: 0.7
});
Особенности:
Используется для динамической реакции на события интерфейса, например, переключение тематических режимов карты.
resetStyle возвращает стиль объекта к исходному
значению, заданному при создании слоя через style.
geoLayer.resetStyle(targetLayer);
Поведение:
layerstyle для корректного
восстановленияЧасто применяется при обработке hover-состояний или выделения объектов.
onEachFeature используется для привязки логики к каждому
элементу GeoJSON.
L.geoJSON(data, {
onEachFeature: function (feature, layer) {
layer.on('click', function () {
console.log(feature.properties);
});
}
});
Ключевые сценарии:
click, mouseover,
mouseout)Особенность заключается в том, что доступ к
feature.properties сохраняется на уровне каждого слоя.
Метод filter позволяет ограничить набор отображаемых
объектов до их добавления в слой.
L.geoJSON(data, {
filter: function (feature) {
return feature.properties.population > 1000;
}
});
Логика:
true — объект добавляетсяfalse — объект игнорируетсяИспользуется для предобработки данных без изменения исходного GeoJSON.
GeoJSON по стандарту не определяет внешний вид точек, поэтому
используется pointToLayer.
L.geoJSON(data, {
pointToLayer: function (feature, latlng) {
return L.circleMarker(latlng, {
radius: 6,
color: 'red'
});
}
});
Назначение:
Marker на
CircleMarkercoordsToLatLng позволяет переопределить механизм
преобразования координат GeoJSON в координаты Leaflet.
L.geoJSON(data, {
coordsToLatLng: function (coords) {
return L.latLng(coords[1], coords[0]);
}
});
Применение:
После создания GeoJSON-слоя доступна работа с внутренними подслоями.
geoLayer.eachLayer(function (layer) {
layer.bindTooltip('Feature');
});
Методы:
eachLayer(callback) — итерация по всем дочерним
слоямgetLayers() — возврат массива всех слоёвgetLayer(id) — получение слоя по идентификаторуЭти методы позволяют выполнять массовые операции без повторного парсинга GeoJSON.
clearLayers удаляет все объекты из GeoJSON-слоя,
оставляя сам контейнер активным.
geoLayer.clearLayers();
Поведение:
L.geoJSONaddDataИспользуется при полной перезагрузке геоданных.
Метод getBounds возвращает географические границы всех
объектов слоя.
const bounds = geoLayer.getBounds();
map.fitBounds(bounds);
Особенности:
LatLngBoundsGeoJSON-слой поддерживает частичное обновление данных без полного пересоздания.
Сценарии обновления:
addData для добавления новых объектовsetStyle для изменения визуального представленияresetStyle для возврата исходного состоянияclearLayers для полной очистки перед новой
загрузкойКомбинация этих методов формирует основу динамических картографических приложений, работающих с потоковыми или изменяющимися геоданными.
Каждый GeoJSON-слой наследует систему событий Leaflet.
geoLayer.on('click', function (e) {
console.log(e.layer);
});
Поддерживаемые уровни событий:
click, add,
remove)onEachFeatureЭто позволяет строить многоуровневую логику взаимодействия с картой без прямого доступа к DOM.