我已经设置了代码,以便在1-6缩放级别下,地图将显示一个GeoJSON图层。在7-10级,它将显示另一个,在11+级,将显示第三个。显示它们的作品。我现在要开始工作的是,如果显示了其他人,则将其关闭。从1-6移到7-10可以正常工作(这意味着它可以正确关闭1-6层),但是从7-10到11+不能正常工作(这意味着7-10层仍然存在),我不知道为什么(使用相同的代码)。
这是GeoJSON图层的ajax:
function getJson(defaultStyle, map, simp, geojsonLayer){
var url = 'file' + simp + '.json';
map.removeLayer(geojsonLayer);
geojsonLayer.clearLayers();
$.getJSON(url, function(data){
geojsonLayer = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature
});
geojsonLayer.addTo(map);
});
}
这是调用的主要函数ajax取决于缩放比例。 simpCounter最初设置为0。
map.on('zoomend', function(e) {
if (map.getZoom() >= 7 && map.getZoom() <= 10) {
if (simpCounter == 0 || simpCounter == 2) {
getJson(defaultStyle, map, 60, geojsonLayer);
simpCounter = 1;
}
} else if (map.getZoom() >= 11) {
if (simpCounter == 0 || simpCounter == 1) {
getJson(defaultStyle, map, 35, geojsonLayer);
simpCounter = 2;
}
}
});
因此,再次,第一个过渡正确关闭了旧层,但是第二个过渡却没有。
#1 楼
改为尝试以下操作:function getJson(simp){ //Removed unneeded arguments here
var url = 'file' + simp + '.json';
map.removeLayer(geojsonLayer);
//geojsonLayer.clearLayers(); I don't believe this needed.
$.getJSON(url, function(data){
geojsonLayer = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature
});
geojsonLayer.addTo(map);
});
}
并为您的调用函数:
map.on('zoomend', function(e) {
if (map.getZoom() >= 7 && map.getZoom() <= 10) {
if (simpCounter == 0 || simpCounter == 2) {
getJson(60);
simpCounter = 1;
}
} else if (map.getZoom() >= 11) {
if (simpCounter == 0 || simpCounter == 1) {
getJson(35);
simpCounter = 2;
}
} else if (map.getZoom() <= 7) { //Return to original data
if (simpCounter == 1 || simpCounter == 2) {
getJson(XX); //Fill out with correct file name
simpCounter = 0;
}
}
});
传递参数时调用
map
中的geojsonLayer
,defaultStyle
和getJson(defaultStyle, map, 60, geojsonLayer);
正在创建对象的新实例。然后,您在可能反映在屏幕上的实例上执行工作,但是一旦回到“主循环”,它基本上会忘记刚做的一切并返回到先前的状态。 由于我猜想您在全球范围内定义了
defaultStyle
,map
和初始geojsonLayer
总体,因此您只需调用它们即可,而无需通过它们。我进行了调整更改全局
map
,以便在函数调用完成后更改仍然存在。 此解决方案对我有用。您可以看到我在此处制作的整个文件内容:http://pastebin.com/yMYQJ2jK
我还定义了1-7的最终缩放级别,因此返回时可以看到初始的JSON数据到初始缩放级别,否则它将丢失并且永远不会被调用,除非您重新加载页面!
#2 楼
我编写了以下示例,以展示如何删除倍数geoJSON图层。///adding geoJSON data
var myGeoJSON = L.geoJSON(myData, {
onEachFeature: function (feature, layer) {
layer.myTag = "myGeoJSON"
}
});
////// function to remove geoJSON layers
var removeMarkers = function() {
map.eachLayer( function(layer) {
if ( layer.myTag && layer.myTag === "myGeoJSON") {
map.removeLayer(layer)
}
});
}
//// calling function
removeMarkers();