Leaflet.js: Comment faire pour supprimer plusieurs couches de carte
Je suis en utilisant Leaflet.js pour une carte. Maintenant, je veux supprimer les calques ajoutés à partir de la carte. En cliquant sur l'entrée n ° bouton coché des cases à cocher doit être modifié de manière incontrôlée, et tous les couches doivent être retirés de la carte.
Pour enlever une couche de la carte de l'id de la couche est nécessaire. Cet id est égal à l'id de la case à cocher correspondante. C'est pourquoi j'utilise jQuery pour obtenir les identifiants de tous les coché les cases à cocher et de stocker leur valeur dans un objet, ici appelé someObj.idsChecked.
Lorsque j'essaie d'utiliser la valeur de val pour supprimer un calque, il ne fonctionne pas alors que le console.journal affiche la valeur requise. Ici par exemple: mapcat52.
Lors de l'insertion de la précédente id codé en dur dans la fonction comme carte.removeLayer(mapcat52) il fonctionne comme prévu.
Où est l'erreur dans mon code ou de mes pensées?
Toute aide est très appréciée.
Le code HTML
<input type="button" id="selectnone" value="deselect all" />
<!-- checkboxes -->
<input id="mapcat52" type="checkbox" name="maplayer" class="maplayer">
<label for="mapcat52">Map Layer One</label>
<input id="mapcat53" type="checkbox" name="maplayer" class="maplayer">
<label for="mapcat53">Map Layer Two</label>
...
Le JS:
$('#selectnone').click(function() {
var someObj = {};
someObj.idsChecked = [];
$("input:checkbox").each(function() {
if ($(this).is(":checked")) {
someObj.idsChecked.push($(this).attr("id"));
}
}).attr('checked', false);
$.each(someObj.idsChecked,function(id, val) {
//displays the wanted value, e.g. "mapcat52" if checkbox with this id is checked
console.log(val);
//does not work: inserted value
map.removeLayer(val);
//works: hard coded value of the leaflet.js/input id
map.removeLayer(mapcat52);
});
});
OriginalL'auteur LuNarez | 2013-08-29
Vous devez vous connecter pour publier un commentaire.
Selon le Dépliant doc API http://leafletjs.com/reference.html#map-removelayer, removeLayer prend un ILayer paramètre:
removeLayer( <ILayer> layer )
mais vous passez une Chaîne de caractères:$(this).attr("id")
Il semble que vous avez le calque de l'objet dans une variable déjà: mapcat52. Vous pourriez sauver la couche d'objets lorsque vous les créez, puis regarder vers le haut par l'id de passer à removeLayer:
OriginalL'auteur kielni
Je dirais que la meilleure façon de les enlever/ajouter (à bascule) des couches de la carte serait d'utiliser un LayerGroup.
Avant d'ajouter des couches individuelles à la carte, les ajouter à une LayerGroup au lieu de cela, puis ajouter que LayerGroup à votre carte.
Puis quand vous avez à enlever les couches, il suffit d'appeler le clearLayers() fonction.
Découvrez l'API pour LayerGroup http://leafletjs.com/reference.html#layergroup
Exemple
Lors de la suppression de la case est cochée
OriginalL'auteur Shriram Sharma
J'ai écrit ci-dessous l'exemple pour montrer comment faire pour supprimer les multiples geoJSON couche.
///ajout du geoJSON données
//////fonction pour supprimer geoJSON couches
////appel de la fonction
removeMarkers();
OriginalL'auteur Mercel Santos