2016-12-17 88 views
0

我使用的是OpenLayers 3(v3.20)。我想要實現的只是從特定層中刪除所有功能。我看到有一個clear方法和文檔中說,該源代碼在OpenLayers中清除BUG 3

清晰(opt_fast)

取下源的所有功能。

然而,當我把它應用到我的層源像這樣:

layer.getSource().clear(); 

我看到一個閃爍(功能被刪除),然後我看到一個服務器請求,這樣的功能是重新裝入。所以,要麼文檔不完整,要麼有錯誤。

我也試圖去除像這樣的特點:

features = source.getFeatures(); 
for (i = 0; i < features.length; i += 1) { 
    source.removeFeature(features[i]); 
} 

但它的作品真的很奇怪。例如,如果我有四個功能,當我循環一次時,它只會刪除兩個功能,當我循環兩次時,會刪除一個額外的功能。總而言之,我必須循環三次(這實際上不是DRY)才能刪除所有功能。我真的很想知道,爲什麼是這樣,我該如何解決它。謝謝!

+0

當你看超過按索引刪除數字1,然後刪除數字2成爲新的數字1.因此,對於每一個你刪除你跳過一個,即只有一半被刪除。爲了解決這個問題,可以改變這個循環,而是使用for(var i = features.length -1; i> = 0; i - )'。 –

+0

@ Karl-JohanSjögren。好的建議!謝謝你,先生! – Jacobian

+0

'layer.clear()'在地圖圖層被清除後觸發地圖圖層重新加載。解決這個問題的方法是使用矢量加載器函數,如果您在使用'.clear()'時設置標誌,則可以繞過重新加載。 – GoinOff

回答

0

如通過Karl-約翰斯耶格倫指出,除去陣列成員當迭代通過它修改陣列本身,所以,可以使用反向陣列或從陣列MDN reference使用本機函數:

features = source.getFeatures(); 
features.forEach(function (feature){ 
    source.removeFeature(feature); 
});