У меня есть карта 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?
Спасибо