2017-01-27 100 views
1

我有一個函數,將在點擊事件中重新創建折線。它可以工作,但刷新層仍然有以前的折線。只有當我縮放地圖時,以前的折線纔會消失。傳單刪除以前的折線

我的代碼。

function buildHotline(response) { 
    //clearMap(); 
    //clear_polyline(); 
    document.getElementById('mapid').innerHTML = "<div id='map' style='width: 100%; height: 100%;'></div>"; 
    //document.getElementById('map').innerHTML = "<div id='mapid' style='width: 100%; height: 100%;'></div>"; 
    var tiles = L.tileLayer('http://{s}.tile.openstreetmap.se/hydda/full/{z}/{x}/{y}.png', { 
    attribution: 'Tiles courtesy of <a href="http://openstreetmap.se/" target="_blank">OpenStreetMap Sweden</a> &mdash; Map data &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'}); 


    var map = new L.map('map', { 
     layers: [tiles], 
     scrollWheelZoom: true, 
     dragging: true, 
     tap: false 
    }); 


    var hotlineLayer = L.hotline(response, { 
     min: 0, 
     max: 120, 
     palette: { 
      0.0: '#3ebcef', 
      0.5: '#78b3d3', 
      1.0: '#000203' 
     }, 
     weight: 5, 
     outlineColor: '#000203', 
     outlineWidth: 1 
    }); 



    //clear first 
    clear_polyline(); 

    bounds = hotlineLayer.getBounds(); 
    map.fitBounds(bounds); 



    hotlineLayer.addTo(map); 


    function clear_polyline() { 
     try { 
      // statements 
      setTimeout(function(){ map.invalidateSize()}, 400); 
      //alert("erase line"); 
      map.removeLayer(hotlineLayer); 

     } catch(e) { 
      // statements 
      console.log(e); 
     } 

    } 

} 

在創建新折線之前,我必須先將其中的clear_polyline清除。由於

回答

0

把參考hotlineLayerbuildHotline()功能的範圍,從而使該函數的多次運行,可以參考hotlineLayer同一個實例。

然後,檢查它是否未定義,如果不是,則將其刪除,然後重新分配新建的實例。

即:

var thing; 

function refreshThing() { 
    if (thing) { remove(thing); } 
    thing = newThing(); 
} 

又見How to remove L.rectangle(boxes[i]),作爲解決方案是非常相似的。