2013-12-16 16 views
1

我不知道爲什麼沒有得到清除,我在嘗試刪除多邊形層:添加和刪除幾何座標層,單張

map.on('zoomend', function(e){ 
     console.log(map.getZoom()); 
     //This is going to be a function that gets dynamically built. 
     var polygons = L.polygon([ 
       [43.22519, -107.69348], 
       [42.99259, -105.48523], 
       [42.26105, -107.7594] 
      ]).bindPopup("Potential Geo polygon area of companies with violations."); 

     if(map.getZoom() >= 5){ map.removeLayer(geojson); }//order matters 
     if(map.getZoom() == 5){ 
      geojson = L.geoJson(statesData, { 
       style: style, 
       onEachFeature: onEachFeature 
      }).addTo(map); 

     } 
     if(map.getZoom() == 7){ 
      if(map.hasLayer(polygons)){ 
       console.log("TEst"); 
      } 
      map.removeLayer(polygons); 
     } 
     if(map.getZoom() == 6){   
      map.addLayer(polygons); 
     } 
    }); 

所以,等值線(以GeoJSON)層容易被移除並添加使用addTo()和removeLayer()函數。但是,多邊形變量不是這種情況。有誰知道爲什麼?

map.hasLayer(polygons)行不會打印到控制檯,指示多邊形不是圖層。如果是這種情況,那麼L.polygon()中的L應該是什麼?

非常感謝。

回答

2

這是因爲多邊形不是不是Leaflet層,而是an extension of the Path class。它從未繼承Layer Group class.removeLayer()方法。相反,它可以像這樣被刪除:

window.map.removeLayer(polygon); 

重構的代碼片段,以考慮到這一點,我們得到

map.on('zoomend', function(e){ 
     console.log(map.getZoom()); 
     //This is going to be a function that gets dynamically built. 
     var polygons = L.polygon([ 
       [43.22519, -107.69348], 
       [42.99259, -105.48523], 
       [42.26105, -107.7594] 
      ]).bindPopup("Potential Geo polygon area of companies with violations."); 

     if(map.getZoom() >= 5){ map.removeLayer(geojson); }//order matters 
     if(map.getZoom() == 5){ 
      geojson = L.geoJson(statesData, { 
       style: style, 
       onEachFeature: onEachFeature 
      }).addTo(map); 

     } 
     if(map.getZoom() == 7){ 
      if(map.hasLayer(polygons)){ 
       console.log("TEst"); 
      } 
      window.map.removeLayer(polygon); 
     } 
     if(map.getZoom() == 6){   
      polygons.addTo(map) 
     } 
    }); 

另一種方法是使用geojson.io創造一些以GeoJSON與多邊形的緯度,經度數組,然後使用L.geoJson方法將它們添加到地圖中,如果您更喜歡removeLayer()方法。

此外,您可以通過瀏覽器JavaScript控制檯捕獲並調試其中的許多錯誤。這是通過Code School的優秀課程,可幫助您更好地使用Chrome控制檯瞭解JavaScript錯誤。

+0

奇怪。根據這個:你引用的http://leafletjs.com/reference.html#polygon,你可以使用addLayer將多邊形對象添加到地圖中。我會認爲基於文檔,隨後應該能夠使用removeLayer從地圖中刪除對象。我嘗試了你的修改方法,但沒有奏效。謝謝你的努力和幫助,無論如何。 –

+0

您可以發佈您收到的控制檯錯誤消息以幫助解決此問題嗎? – geraldarthur

+0

我沒有得到任何控制檯錯誤。否則我會很樂意發佈它們。我嘗試了FF和Chrome。另外,window.map.removeLayer(多邊形)有什麼區別;和map.removeLayer(多邊形);?通過添加窗口,您可以簡單地從地圖對象進入窗口對象,並且不需要這樣做。或者我錯過了什麼? –