首页 > 解决方案 > 如果在 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 库有关?

谢谢

标签: javascriptif-statementleafletleaflet.draw

解决方案


就您else而言,您设置属性hrefdownload. 考虑在零件中删除它们,if否则它们将永远保留在那里,并且由于第一次下载,每次新点击都会触发下载


推荐阅读