2016-08-29 2 views
1

各機能がマップに描画された後にリストを更新したいと思います。OL3のソースにドローエンドを追加した後のイベントの捕捉方法は?

drawendを使用して図の仕上げをキャッチすると、その時点で描画されているフィーチャはベクターソースにまだ追加されていません。

ので

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

draw.on('drawend', function() { 
    console.log(source.getFeatures().length) 
}); 

map.addInteraction(draw); 

ウィル最初のポイントが追加されている出力0。

描画が終了したら、マップの状態をキャッチするにはこの機能はベクターソースに追加されていますか?したがって、空のマップでsource.getFeatures()。lengthが1になる状態を探しています。

+0

Answer(Here)(http://stackoverflow.com/a/39207703/4640499) –

+0

@ JonatasWalkerありがとう、両方の質問がほぼ同時に尋ねられた面白い。可能であれば、それを描画対話のイベントとして追加することをお勧めします。 – zsero

答えて

3

いつでも@jonatasの提案を試すことができます。それはあなたが探している仕事をするはずです。 もう1つの回避策は、イベント自体から現在描画されているフィーチャを取得し、それをフィーチャ配列に追加することです。これをチェックしてください。

draw.on('drawend', function (e) { 
var currentFeature = e.feature;//this is the feature fired the event 
var restOfFeats = source.getFeatures();//rest of feats 
var allFeats = restOfFeats.concat(currentFeature);//concatenate the event feat to the array of source feats 
console.log(allFeats.length) 
}); 
+0

これは重複機能を引き起こしませんか? –

+0

'drawend'イベントが発生するたびに、新しいフィーチャー配列(allFeats)が作成されます。重複はありません。 – pavlos

+0

説明をありがとう –

関連する問題