Маркеры, нарисованные на leaflet.draw, не удаляются после удаления слоя.

Я создал простое приложение для добавления точек с помощью рисования листовок. Если пользователь отменит диалоговое окно, нарисованный слой будет удален. Однако при отрисовке следующего маркера снова появляются предыдущие отмененные. Вот кусок кода:

// Create Leaflet Draw Control for the draw tools and toolbox
var drawControl = new L.Control.Draw({
  draw : {
    polygon : false,
    polyline : false,
    rectangle : false,
    circle : false,
    circlemarker: false
  },
  edit : false,
  remove: false
});

// Boolean global variable used to control visiblity
var controlOnMap = false;

// Create variable for Leaflet.draw features
var drawnItems = new L.FeatureGroup();

// Function to add the draw control to the map to start editin
function startEdits(){
  if(controlOnMap == true){
    map.removeControl(drawControl);
    controlOnMap = false;
  }
  map.addControl(drawControl);
  controlOnMap = true;
};

// Function to remove the draw control from the map
function stopEdits(){
  if(controlOnMap == true){
    map.removeControl(drawControl);
    controlOnMap = false;
  }else{
    alert("Edition mode is already stopped")
  };
};

// Use the jQuery UI dialog to create a dialog and set options
var dialog = $("#dialog").dialog({
  autoOpen: false,
  height: 600,
  width: 500,
  modal: true,
  position: {
    my: "center center",
    at: "center center",
    of: "#map"
  },
  buttons: {
    "Add": setData,
    "Cancel": function() {
      dialog.dialog("close");
      map.removeLayer(drawnItems);
    }
  },
  close: function() {
    dialog.dialog("close");
    map.removeLayer(drawnItems);
  }
});

Есть ли функция для удаления нарисованных объектов или что-то подобное?


person Josep Pueyo    schedule 06.10.2020    source источник


Ответы (2)


Вы также должны очистить группу drawnItems:

drawnItems.clearLayers();
map.removeLayer(drawnItems);

Более новая библиотека для рисования: Geoman.io

person Falke Design    schedule 06.10.2020

Только сейчас я нашел это решение:

    drawnItems.eachLayer(
        function(l){
            drawnItems.removeLayer(l);
    });

Но ответ Falke design гораздо более причудлив. Благодарю вас!

person Josep Pueyo    schedule 06.10.2020