2014-09-26 78 views
4

刪除該功能會很感激以下問題的任何及所有的幫助:的OpenLayers 3刪除功能不會從地圖

我使用的OpenLayers 3繪製多邊形。我想要實現的內容如下所示 - 當開始繪製新的多邊形時,從地圖中移除現有的任何多邊形,這樣一次只能繪製一個單一的多邊形。但是,會發生的情況是該特徵(多邊形)僅從內存中移除,但仍然保持在地圖上可見。

這的jsfiddle演示了此問題: http://jsfiddle.net/jp4dojwu/

正如你所看到的,onDrawStart我首先清除tempVectorSource(其中多邊形繪製,因爲featureOverlay.source === tempVectorSource),然後報警的功能數量爲tempVectorSource。如預期的那樣,警報將始終指示0,但多邊形在地圖上仍可見。

function onDrawStart(event) 
{ 
    //remove everything drawn previously 
    tempVectorSource.clear(); 

    //can see the feature(s) are removed from memory 
    alert(tempVectorSource.getFeatures().length); 
} 

在此先感謝!

編輯:發現的人一個解決辦法誰遇到了同樣的問題 - 調用矢量源清楚之前設置的所有以前繪製的特色幾何與沒有COORDS點,如下所示:

function onDrawStart(event) 
{ 
    var features = tempVectorSource.getFeatures(); 
    for(var i=0;i<features.length;i++) 
    { 
     features[i].setGeometry(new ol.geom.Point([])); 
    } 
    tempVectorSource.clear(); 

} 

上述基本上將所有多邊形渲染爲「不可見」點。仍然好奇地找到一個真正的解決方案!

編輯(2):請參閱我接受的答案下面的評論,我有featureOverlay設置爲地圖的形狀駐留..實例刪除以下行修復問題,因爲featureOverlay有它自己的形狀副本:

featureOverlay.setMap(map); 

回答

4

不知道有沒有什麼幫助,但我有一個相關的問題:

我寫了一段代碼,這工作得很好「重置」繪圖層。您可以先使用onDrawStart觸發該功能,然後再啓動繪圖部分。

function clearMap() { 
    vector_layer.getSource().clear(); 
    if (select_interaction) { 
    select_interaction.getFeatures().clear(); 
    } 
} 

這適用於最新OL3建造(編輯:這在當時是V3.0.0)

+0

搞不清我跟隨..到底是什麼select_interaction?至於在矢量源上調用clear(),它似乎並沒有擦除多邊形(至少在當時使用的ol.js構建中 - 是否在以下版本中已修復) - 它們仍然可見,儘管有一個稍微更透明的背景 – MS86 2014-11-12 18:53:07

+0

對不起,也許我應該更詳細地解釋。在我的情況下,「select_interaction」是ol.interaction.Select的變量。像這裏一樣(http://openlayers.org/en/master/apidoc/ol.interaction.Select.html)。調用清除爲我工作,我正在使用最新的ol版本。 – stopopol 2014-11-12 19:41:56

+0

我不確定你使用的是哪個ol3版本,但下面的[draw-features](http://openlayers.org/en/master/examples/draw-features.html)適用於我:'draw。 on('drawstart',function(){vector.getSource()。clear();});'。 – erilem 2014-11-12 22:24:47