Leaflet.js: so entfernen Sie mehrere Schichten von anzeigen
Ich bin mit Leaflet.js für eine Karte. Jetzt will ich entfernen Hinzugefügt-Layer aus der Karte. Durch anklicken der Eingabe-Taste werden alle Kontrollkästchen aktiviert wird geändert auf deaktiviert und alle zugehörigen Schichten müssen entfernt werden von der Karte.
Entfernen Sie einen layer aus der Karte die id der Schicht erforderlich ist. Diese id entspricht der id des entsprechenden Kontrollkästchens. Das ist, warum ich jQuery verwenden, um die ids aller geprüften Kontrollkästchen und speichern Sie Ihre Werte in einem Objekt, hier mit dem Namen someObj.idsChecked.
Wenn ich versuche, aus den gespeicherten Wert val so entfernen Sie eine Ebene, die nicht funktionieren, während die Konsole.log zeigt den gewünschten Wert. Hier zum Beispiel: mapcat52.
Beim einlegen der vorherigen id hart codiert in der Funktion wie Karte.removeLayer(mapcat52) funktioniert es wie erwartet.
Wo ist der Fehler in meinem code oder meine Gedanken?
Jede Hilfe wird sehr geschätzt.
Den 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>
...
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);
});
});
- Dies könnte helfen: stackoverflow.com/questions/39186001/how-to-close-all-popups
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entsprechend der Packungsbeilage API-doc http://leafletjs.com/reference.html#map-removelayer, removeLayer nimmt ein ILayer-parameter:
removeLayer( <ILayer> layer )
aber du bist übergibt eine Zeichenfolge:$(this).attr("id")
Wie es aussieht, haben Sie das layer-Objekt in eine variable bereits: mapcat52. Sie könnten die layer-Objekte, wenn Sie erstellt werden, dann suchen Sie nach id zu übergeben removeLayer:
Ich würde sagen, die einfachste Möglichkeit zum entfernen/hinzufügen (Umschalt -) Schichten von der Karte wäre ein LayerGroup.
Vor dem hinzufügen der einzelnen Schichten auf der Karte, fügen Sie Sie zu einer LayerGroup statt und dann hinzufügen, dass LayerGroup zu Ihrer Karte.
Dann, wenn Sie zum entfernen der Schichten, rufen Sie einfach den clearLayers () - Funktion.
Überprüfen Sie heraus die API für LayerGroup http://leafletjs.com/reference.html#layergroup
Beispiel
Entfernen, wenn checkbox aktiviert ist
Schrieb ich das folgende Beispiel, um zu zeigen, wie zu entfernen vielfachen geoJSON-layer.
///hinzufügen von geoJSON-Daten
//////Funktion zum entfernen geoJSON Ebenen
////aufrufende Funktion
removeMarkers();