2015-01-03 15 views
3

我正在使用ol.Interaction.Draw在地圖上繪製多邊形。我想在繪製完個人特徵後對其進行設計。當我檢測到一個DRAWEND事件時,我嘗試將樣式附加到繪製的最後一個要素上,但只有一般圖層樣式出現在屏幕上,儘管我在通過調試器搜索要素本身時看到了它。在繪製後附加樣式到要素

map.addInteraction(drawInter = new ol.interaction.Draw({   
       features: drawLayer.getFeatures(),      
       type: "Polygon" 
       })             
      ); 

drawInter.on('drawend', function(e) {       
    var style = new ol.style.Style({          
     fill: new ol.style.Fill({ color: newColor }) 
     }); 

    var features = drawLayer.getFeatures().getArray();     
    var last = features.length-1; 
    features[last].setStyle(style); 
}); 

回答

6

你打電話setStyle功能未剛繪製的一個。這就是爲什麼剛剛繪製的功能沒有預期的風格。 (並考慮您的代碼其實我驚訝的是,繪製完成地圖上的功能仍然存在。)

你的代碼是不正確/怪在多個方面:

  • 閱讀你的代碼,它聽起來就像你認爲向量層上每次調用getFeatures都會返回相同的數組。情況並非如此。每次調用getFeatures實際上都會返回一個新數組。

  • 您將一組特徵傳遞給Draw交互(通過features選項)。這是不正確的。 features選項應爲ol.Collection

  • drawend回調中,事件對象(代碼中的e)包含對繪製特徵(e.feature)的引用。

所以,如果你想繪製的功能持續到一個矢量圖層,可以使用以下命令:

var draw = new ol.interaction.Draw({ 
    type: 'Polygon', 
    source: drawLayer.getSource() 
}); 

draw.on('drawend', function(e) { 
    var style = new ol.style.Style({ 
    // ... 
    }); 
    e.feature.setStyle(style); 
}); 

map.addInteraction(draw); 
+0

我工作過掉'繪製和修改功能example'在網站上,並定義我的圖層是這樣的: 'drawLayer = new ol.FeatureOverlay({source:new ol.source.Vector()});' 這會產生一個錯誤,使用'source:drawLayer.getSource ()'方法。 – Bill

+0

**更新:**我將圖層初始化更改爲: 'drawLayer = new ol.layer.Vector({source:new ol.source.Vector()}); map.addLayer(this.drawLayer)' ,我現在可以風格特點,但是當我加入modifyInteraction: 'map.addInteraction(this.modifyInter =新ol.interaction.Modify({Y 來源:drawLayer .getSource()' 無論何時加載此代碼,我都會收到一個錯誤: _Uncaught TypeError:無法在ol-debug.js中讀取undefined屬性'forEach':90285_ – Bill

+0

這是一個不同的問題。一個'ol.Collection',通過'features'選項指定。這個集合包括修改的候選對象。 – erilem