ЕСЛИ не работает после того, как ELSE был принят (потенциальная проблема Leaflet.Draw) - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть карта Leaflet, которая использует библиотеку Leaflet.Draw и позволяет пользователю рисовать многоугольник geoJSON и загружать файл (после того, как он был преобразован в формат .KML). У меня была проблема, из-за которой функция загрузки продолжала бы работать, если бы не был нарисован многоугольник, поэтому я попытался исправить это с помощью оператора IF / ELSE, который смотрит на длину файла geoJSON.

document.getElementById('export').onclick = function(e) {

  //extract GeoJson from featureGroup
  var data = featureGroup.toGeoJSON();
  console.log(data.features.length);    

  if (data.features.length === 0) {
    alert('Your drawn feature is not valid!');              
  } else {
    //convert to KML
    var kml = tokml(data);

    //convert to dataURL format
    var convertedData = 'application/vnd.google-earth.kml+xml;charset=utf-8,' + 
    encodeURIComponent(kml);

    //create export
    document.getElementById('export').setAttribute('href', 'data:' + convertedData);
    document.getElementById('export').setAttribute('download','3DroneMapping_AOI.kml');
  }
} 

Сначалаприведенный выше код, кажется, работал хорошо. Нажатие на кнопку загрузки без рисования объекта многоугольника приведет к записи 0 в консоль, и появится предупреждение. Где при рисовании многоугольника и нажатии кнопки загрузки на консоль войдет 1, и файл загрузится.

Проблема возникает после рисования многоугольника, его загрузки и удаления с помощью кнопки удаления:

document.getElementById('delete').onclick = function(e) {           
  featureGroup.clearLayers();
}

Теперь, когда функция многоугольника была удалена, кнопка загрузки должна снова вызвать предупреждение. Но происходит следующее: несмотря на то, что консоль по-прежнему записывает 0 и оповещение срабатывает, после нажатия кнопки «ОК» в предупреждении секция кода ELSE все еще выполняется, и тот же файл geoJSON, который, по-видимому, был «очищен», все еще загружается (содержит то же самоекоординаты).

Это простая ошибка в моем коде или это связано с библиотекой Leaflet.Draw?

Спасибо

1 Ответ

1 голос
/ 05 ноября 2019

В вашей else части вы устанавливаете атрибуты href и download. Подумайте об их удалении в части if, иначе они останутся там навсегда, и после первой загрузки каждый новый щелчок будет вызывать загрузку

...