我不确定为什么我要删除的多边形图层没有被移除:
map.on('zoomend', function(e){
console.log(map.getZoom());
//This is going to be a function that gets dynamically built.
var polygons = L.polygon([
[43.22519, -107.69348],
[42.99259, -105.48523],
[42.26105, -107.7594]
]).bindPopup("Potential Geo polygon area of companies with violations.");
if(map.getZoom() >= 5){ map.removeLayer(geojson); }//order matters
if(map.getZoom() == 5){
geojson = L.geoJson(statesData, {
style: style,
onEachFeature: onEachFeature
}).addTo(map);
}
if(map.getZoom() == 7){
if(map.hasLayer(polygons)){
console.log("TEst");
}
map.removeLayer(polygons);
}
if(map.getZoom() == 6){
map.addLayer(polygons);
}
});
因此,可以使用addTo()和removeLayer()函数轻松删除和添加等值区(geojson)图层。但是,多边形变量不是这种情况。有谁知道为什么?
map.hasLayer(多边形)线不会打印到控制台,表示多边形不是图层。如果是这种情况那么那么L.polygon()中的L是什么意思呢?
非常感谢。
答案 0 :(得分:2)
那是因为多边形不是Leaflet图层,而是an extension of the Path class。它永远不会从Layer Group class继承.removeLayer()
方法。相反,它可以像这样删除:
window.map.removeLayer(polygon);
重构代码段以将此考虑在内我们得到
map.on('zoomend', function(e){
console.log(map.getZoom());
//This is going to be a function that gets dynamically built.
var polygons = L.polygon([
[43.22519, -107.69348],
[42.99259, -105.48523],
[42.26105, -107.7594]
]).bindPopup("Potential Geo polygon area of companies with violations.");
if(map.getZoom() >= 5){ map.removeLayer(geojson); }//order matters
if(map.getZoom() == 5){
geojson = L.geoJson(statesData, {
style: style,
onEachFeature: onEachFeature
}).addTo(map);
}
if(map.getZoom() == 7){
if(map.hasLayer(polygons)){
console.log("TEst");
}
window.map.removeLayer(polygon);
}
if(map.getZoom() == 6){
polygons.addTo(map)
}
});
另一种方法是使用geojson.io创建一些包含多边形纬度,经度数组的geoJSON,然后使用L.geoJson
方法将其添加到地图中,如果您更喜欢removeLayer()
方法
此外,您可以通过浏览器JavaScript控制台捕获并调试其中的许多错误。通过Code School这是一个很好的课程,可以帮助您更好地使用Chrome控制台来理解JavaScript错误。