用Leaflet添加和删除几何坐标图层

时间:2013-12-16 23:06:59

标签: javascript leaflet

我不确定为什么我要删除的多边形图层没有被移除:

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是什么意思呢?

非常感谢。

1 个答案:

答案 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错误。