Продолжая запрос отсюда:
https://gis.stackexchange.com/questions/340223/leaflet-making-features-gone-when-zoom-out
Я бы хотел, чтобы при уменьшении масштаба некоторые слои полностью исчезали.
Я пытался вот так:
map.on('zoomend', function (e) {
zoom_based_layerchange();
});
function clean_map() {
map.eachLayer(function (layer) {
if (layer instanceof L.GeoJSON)
{
map.removeLayer(layer);
}
//console.log(layer);
});
}
function zoom_based_layerchange() {
//console.log(map.getZoom());
var currentZoom = map.getZoom();
switch (currentZoom) {
case 8: //refers to the zoom level: 8
clean_map();
sitis.addTo(map); //show "sitis" geoJSON layer
break;
case 12:
//clean_map(); - removed, as I don't need to remove the layer visible at lower zoom level
church.addTo(map); //show "church" geoJSON layer
break;
default:
// do nothing
break;
}}
но, к сожалению, это не то, что я ищу, потому что как только один слой исчезает, другой входит. В конце концов, самый верхний слой остаетсявсе еще виден при уменьшении до уровня 1 согласно примеру здесь:
http://jsfiddle.net/expedio/kuovyw8m/
Поскольку я хотел бы, чтобы слои были уменьшены, я попытался вот так:
map.on('zoomend', function () {
if (map.getZoom() < 10 {
map.removeLayer(sitec);
}
if (map.getZoom() < 12 {
map.removeLayer(test);
}
else {
map.addLayerGroup([sitec,test]);
}
});
это не работает полностью. COnsole говорит:
Uncaught SyntaxError: Неожиданный токен '{', что противоречит приведенному здесь примеру:
https://gis.stackexchange.com/questions/258515/show-hide-markers-depending-on-zoom-level
в другом случае у меня есть:
Uncaught TypeError: sitec.removeFrom не является функцией в i. ((индекс): 174) на i.fire (leaflet.js: 5) на i._moveEnd (leaflet.js: 5) на i. (leaflet.js: 5)
, когда наберите код, подобный этому:
map.on('zoomend', function () {
var z = map.getZoom();
if (z > 12) {
return sitec.addTo(map);
}
if (z > 14) {
return test.addTo(map);
}
return sitec.removeFrom(map);
});
согласно примеру здесь:
https://gis.stackexchange.com/questions/182657/zoom-dependent-layers-in-leaflet
Последнее, что я попробовал, был плагин, доступный здесь:
https://github.com/auto-mat/leaflet-zoom-show-hide/blob/master/demo.html
Куда я положил:
zsh = new ZoomShowHide();
zsh.addTo(map);
sitec.min_zoom = 9;
zsh.addLayer(sitec);
test.min_zoom = 11;
zsh.addLayer(test);
, но все равно результат не получился. Консоль говорит:
uncaught TypeError: layer.addTo не является функцией -> из leaflet-zoom-hide 21 layer.addTo (this._layerGroup);
Кто-нибудь знает, как с этим бороться?
Мой код доступен здесь:
https://jsfiddle.net/Krukarius/Ln48wfrm/1/