Leaflet - позволяет переключаться на другой базовый слой с максимальным увеличением - PullRequest
1 голос
/ 17 марта 2019

У меня есть 2 базовых слоя (map и satellite), между которыми пользователи могут переключаться.Максимальный масштаб слоя спутника выше на 2. Я использую предоставленную Leaflet L.control.Layers() для управления слоями

var mapLayer = L.tileLayer('map-tiles.example.com/{z}/{x}/{y}.png', {
    maxZoom: 18,
})

var satelliteLayer = L.tileLayer('satellite-tiles.example.com/{z}/{x}/{y}.png', {
    maxZoom: 20,
})

var baseLayers = {
    'Map': mapLayer,
    'Satellite': satelliteLayer
}

var layerControls = L.control.layers(baseLayers).addTo(map);

Если пользователь увеличит изображение до 19 или 20 в виде спутника, он не сможет переключитьсявернуться к слою карты (переключатель отключен), пока он не вернется к 18 или ниже.

Я хочу, чтобы пользователь мог переключаться на слой карты даже при увеличении 19 или 20. И когдапользователь переключается на слой карты, масштаб будет установлен на 18.

Есть ли способ добиться этого с помощью управления слоями в Leaflet?Или мне нужно создать собственный слой управления?

Ответы [ 2 ]

2 голосов
/ 17 марта 2019

Есть ли способ достичь этого с помощью управления слоями в Leaflet?

Не с поведением по умолчанию, нет.Если вы проверите соответствующую часть исходного кода , вы увидите, что L.Control.Layers всегда отключает флажки / переключатели, когда слой выходит за пределы min / maxzoom range.

Или мне нужно создать собственный слой управления?

Да, вы можете создать свой собственный подкласс из L.Control.Layers отключив эту функцию, заменив соответствующий метод на функцию, которая ничего не делает:

L.Control.Layers.NeverDisable = L.Control.Layers.extend({

  _checkDisabledLayers: function(){}

});

var myLayersControl = new L.Control.Layers.NeverDisable(
    baselayers, overlayLayers, options);
myLayersControl.addTo(map);

Вы можете проверить рабочий пример в этом plunkr .

1 голос
/ 17 марта 2019

Простой обходной путь, позволяющий выбрать mapLayer для масштабирования 19-20, - это использовать параметр Tile Layer maxNativeZoom в 18 и увеличить maxZoom до 20.

Затем, если вы все еще хотите автоматически уменьшить масштаб до 18, когда выбрано mapLayer, используйте прослушиватель на карте "baselayerchange" событие, отметьте map.getZoom() и измените его (map.setZoom(18)) при желании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...