Mateo, miembro de este equipo, nos hizo el favor de escribir este post porque controla a la perfección dicho tema.
Solución:
Prueba esto en su lugar:
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);
);
Y para su función de llamada:
map.on('zoomend', function(e)
if (map.getZoom() >= 7 && map.getZoom() <= 10) else if (map.getZoom() >= 11)
if (simpCounter == 0 else if (map.getZoom() <= 7)
);
Cuando estás pasando los argumentos map
, geojsonLayer
y defaultStyle
en la llamada getJson(defaultStyle, map, 60, geojsonLayer);
está creando nuevas instancias de los objetos. Luego realiza el trabajo en las instancias que pueden reflejarse en la pantalla, pero una vez que regresa al 'bucle principal', básicamente olvida todo lo que acaba de hacer y vuelve al estado anterior.
Ya que supongo que definiste defaultStyle
, map
y la inicial geojsonLayer
población en el ámbito global solo tienes que llamarlos, no hay necesidad de pasarlos. Con los ajustes que hice cambia el global map
por lo tanto, los cambios persisten después de que finalizan las llamadas a funciones.
Esta solución funcionó para mí. Puede ver el contenido completo del archivo que hice aquí: http://pastebin.com/yMYQJ2jK
También defino un nivel de zoom final para 1-7 para que pueda ver sus datos JSON iniciales cuando regrese al nivel de zoom inicial, de lo contrario, se pierde y nunca se vuelve a llamar a menos que vuelva a cargar la página.
Escribí el siguiente ejemplo para mostrar cómo eliminar varias capas de 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();
Sección de Reseñas y Valoraciones
Tienes la opción de secundar nuestra investigación añadiendo un comentario y dejando una valoración te damos las gracias.