2017-01-27 20 views
1

У меня есть функция, которая воссоздает полилинию на событие click. он работает, но обновленный слой все еще получил предыдущую полилинию. только когда я масштабирую карту, предыдущая полилиния исчезла.листовка удалить предыдущую полилинию

Мой код.

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

Поместите ссылку на hotlineLayerвне сферы функции buildHotline(), так что несколько пробегов этой функции могут относиться к одному экземпляру hotlineLayer.

Затем проверьте, не определено ли оно, удалите его, если это не так, и повторно назначите с помощью вновь созданного экземпляра.

т.е .:

var thing; 

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

Смотрите также How to remove L.rectangle(boxes[i]), так как решение очень похоже.