Мы работаем над школьным проектом, цель которого - создать карту, на которой в зависимости от масштаба масштабирования слой переключается с одного агрегированного уровня на более низкий агрегированный уровень. Кроме того, у нас есть несколько групп слоев на основе темы, к которой это необходимо применить. Таким образом, вы щелкаете тему, и новая группа слоев, которая переключается в зависимости от уровня масштабирования, становится активной, а когда вы щелкаете другую тему, другая группа слоев становится активной и переключается в зависимости от уровня масштабирования. Это означает, что темы являются исключительными, в идеале у вас не может быть более одной активной одновременно.
Мы уже пытались заставить эту работу работать несколькими способами, но без особого успеха. Используя L.Control.Layers, мы не могли сгруппировать разные слои вместе с помощью одного переключателя и переключать их в зависимости от масштабирования, поскольку элемент управления слоем, встроенный в листовку, всегда разделяет их на отдельные. Даже использование L.layerGroup для объединения нескольких переменных слоя или создание нескольких слоев в одну переменную, а затем добавление их на карту с помощью l.control.layer.
Мы также пытались использовать L.easyButton (https://github.com/CliffCloud/Leaflet.EasyButton). Это позволило нам разместить переменные под одной кнопкой и добавить внутри нее переключение слоев на основе масштабирования. Однако проблема здесь в том, что мы не можем деактивировать эту функцию после активации. В результате несколько из них активны в одной точке и перекрывают друг друга.
Если возможно, мы хотели бы знать, следует ли нам использовать другой подход или может ли работать функция управления листовкой или использование easyButton и как?
Это пример кода для одной из кнопок, которая может появляться несколько раз, но отображать другую тему:
L.easyButton( '<span class="star">★</span>', function (polygon) {
var ejerlav_polygon = new L.tileLayer.betterWms(
'http://[IP]:[PORT]/geoserver/prlayer/wms', {
layers: 'prlayer:ejerlav',
transparent: true,
styles: 'polygon',
format: 'image/png'});
var municipality_polygon = new L.tileLayer.betterWms(
'http://[IP]:[PORT]/geoserver/prlayer/wms', {
layers: 'prlayer:municipality',
transparent: true,
styles: 'polygon',
format: 'image/png'});
map.on("zoomend", function() {
if (map.getZoom() <= 10 && map.getZoom() >= 2) {
map.addLayer(municipality_polygon);
} else if (map.getZoom() > 10 || map.getZoom() < 2) {
map.removeLayer(municipality_polygon);
}
});
map.on("zoomend", function() {
if (map.getZoom() <= 11 && map.getZoom() >= 11) {
map.addLayer(ejerlav_polygon);
} else if (map.getZoom() > 11 || map.getZoom() < 11) {
map.removeLayer(ejerlav_polygon);
}
});
}).addTo(map);