[英]Setting zoom level for layers in leaflet
从这里继续查询:
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]);
}
});
它不完全工作。 控制台 说:
Uncaught SyntaxError: Unexpected token '{' 这与此处的示例相矛盾:
https://gis.stackexchange.com/questions/258515/show-hide-markers-depending-on-zoom-level
在其他情况下,我有:
未捕获的类型错误:sitec.removeFrom 不是 i 处的 function。 ((index):174) 在 i.fire (leaflet.js:5) 在 i._moveEnd (leaflet.js:5) 在 i. (传单.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);
但仍然没有结果。 控制台说:
未捕获的类型错误:layer.addTo 不是 function -> 来自 Leaflet-zoom-hide 21 layer.addTo(this._layerGroup);
有谁知道如何处理它?
我的代码在这里可用:
我找到了一种解决方案,我们可以用更短(虽然更实用)的方式来解释:
根据下面的例子:
https://gis.stackexchange.com/questions/258515/show-hide-markers-depending-on-zoom-level
我们可以这样做:
map.on('zoomend', function() {
if (map.getZoom() <6){
map.removeLayer(job);//1st geoJSON layer
}else{
map.addLayer(job);
}
if (map.getZoom() <7){
map.removeLayer(job2); //2nd geoJSON layer
}else{
map.addLayer(job2);
}
if (map.getZoom() <8){
map.removeLayer(job3); //3rd geoJSON layer
}else{
map.addLayer(job3);
}
});
这对我们来说更好,不像更短的...
map.on('zoomend', function() {
if (map.getZoom() <6){
map.removeLayer(job);//1st geoJSON layer
}
if (map.getZoom() <8){
map.removeLayer(job2);//2nd geoJSON layer
}
if (map.getZoom() <10){
map.removeLayer(job3);//3rd geoJSON layer
}
else {
map.addLayer(job);
map.addLayer(job2);
map.addLayer(job3);
} //all layers are to be switched on, when zoom level reach 10
});
当缩放级别达到 function 中给出的最大值时,可以将所有图层切换回来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.