javascript - 如果在 ELSE 被接受后无法工作(潜在的 Leaflet.Draw 问题)
问题描述
我有一个 Leaflet 地图,它使用 Leaflet.Draw 库并允许用户绘制一个 geoJSON 多边形并下载文件(在它被转换为 .KML 格式之后)。我有一个问题,如果没有绘制多边形,下载功能仍然会运行,所以我尝试使用查看 geoJSON 文件长度的 IF/ELSE 语句来解决这个问题。
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 库有关?
谢谢
解决方案
就您else
而言,您设置属性href
和download
. 考虑在零件中删除它们,if
否则它们将永远保留在那里,并且由于第一次下载,每次新点击都会触发下载
推荐阅读
- python - 如何在 Pandas DataFrame 中跳过列标题行
- rstudio - 将 csv 文件加载到 Rstudio 中的 Spark DataFrame 时发生错误
- python-3.x - 在 for 循环 Python 中结束
- flutter - 在 Flutter webview 中拦截 AJAX 适用于 iOS 但不适用于 Android
- clojure - 如何在 deps.edn 项目中使用 cljsjs 包
- javascript - 是否可以通过免费帐户使用 firebase 进行网络抓取?
- sql-server - TSql 前面的反斜杠更改列值
- linux - 仅当行不存在时,如何将一行添加到不同子目录下的多个文本文件?
- arrays - 如何将数组值存储在 Postman 的环境变量中
- python - 使用 Bokeh 绘图时如何为多个数据集之一添加悬停工具