es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Leaflet Draw – Eliminar marcador sin confirmación deguardado

Tengo un mapa con controles de dibujo para crear, editar y eliminar marcadores.

Todo funciona bien, pero me gustaría eliminar el marcador con solo un clic… sin confirmar el guardado.

No he encontrado ninguna publicación que explique cómo puedo hacer esto… o mi búsqueda es incorrecta. solo tengo este código

L.EditToolbar.Delete.include({
    enable: function () {
        this.options.featureGroup.clearLayers();
    }
});

pero esto elimina todos los marcadores… quiero eliminar los marcadores uno por uno sin confirmar.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para eliminar marcadores con solo un clic, puede modificar la clase L.EditToolbar.Delete de la siguiente manera:

    L.EditToolbar.Delete.include({
        removeAllLayers: false, // deshabilitar la eliminación de todas las capas a la vez
    
        enable: function () {
            this._deletedLayers = new L.LayerGroup(); // crear un nuevo LayerGroup para las capas eliminadas
            L.Toolbar.prototype.enable.call(this); // llamar al método padre para habilitar la barra de herramientas
        },
    
        addHooks: function () {
            L.Toolbar.prototype.addHooks.call(this); // llamar al método padre para agregar los hooks
            this._map.on('click', this._removeLayer, this); // vincular el evento click para eliminar capas
        },
    
        removeHooks: function () {
            L.Toolbar.prototype.removeHooks.call(this); // llamar al método padre para eliminar los hooks
            this._map.off('click', this._removeLayer, this); // desvincular el evento click para eliminar capas
        },
    
        _removeLayer: function (e) {
            var layer = this._map._targets[e.target._leaflet_id]; // obtener la capa clicada
            if (layer && layer.editing && layer.editing.enabled()) {
                layer.editing.disable(); // deshabilitar la edición para eliminar el marcador
                this._deletedLayers.addLayer(layer); // agregar la capa eliminada al LayerGroup
                this._map.removeLayer(layer); // eliminar la capa del mapa
            }
        }
    });
    

    Esto anulará los métodos enable, addHooks y removeHooks para agregar un listener de evento click al mapa y así poder eliminar las capas de manera individual. También creará un nuevo LayerGroup para almacenar las capas eliminadas y anulará el método _removeLayer para agregar la capa eliminada al LayerGroup.

    Para utilizar este L.EditToolbar.Delete modificado, simplemente reemplace su control actual EditToolbar.Delete por este:

    var deleteControl = new L.EditToolbar.Delete({
        featureGroup: myFeatureGroup,
        edit: {
            remove: false // deshabilitar la eliminación de capas arrastrándolas a la papelera
        }
    });
    
    map.addControl(deleteControl);
    

    Esto agregará el nuevo control de eliminación al mapa, que eliminará los marcadores con solo un clic.

Comments are closed.