OpenLayers 3.2.0マップがあり、いくつかのベクターソース(ol.source.Vector
)と関連するベクターレイヤー(ol.layer.Vector
)を備えています
機能(ol.Feature
)がベクターソースに追加されるdata
と、その機能が表すJavaScriptオブジェクトに設定されたプロパティが提供されます。TypeScriptは続きます...
vectorSource.addFeature(new ol.Feature({
geometry: /* ... */,
data: vectorData,
}));
ベクトルレイヤーには、data
プロパティを読み取り、そのスタイルを取得するスタイル関数があります。
vectorLayer = new ol.layer.Vector({
source: vectorSource,
renderBuffer: /* ... */,
style: function (feature: ol.Feature, resolution: any) {
var data = </* TypeScript Type */>feature.get('data');
if ((data) && (data.style)) {
return [data.style];
}
else {
/* return default style */
}
}
});
マップに関係のないイベントにより、スタイルが変更される場合があります。たとえば、オブジェクトが無効になると、そのスタイルが変更されます。明らかに、data.style
完全に私の管理下にあるため、変更するのは簡単です。
問題は、スタイルが変更されたことをマップが認識しないことです。オブジェクトのスタイルを変更してからマップをズームして強制的に再描画すると、スタイル関数が実行されて新しいスタイルが返され、フィーチャが再描画されます。プログラムでマップを強制的に更新するにはどうすればよいですか?
いくつかの検索と実験の後、私は試しました:
- 呼び出し
render()
にol.Map
自分自身。 - 呼び出し
dispatchChangeEvent()
にol.source.Vector
- 呼び出し
redraw()
にol.layer.Vector
これらは提案されましたが、どれも機能しませんでした。OpenLayers3.2.0 APIのドキュメントに最初のメソッドしかリストされておらず、安定しているとマークされていないため、驚くには当たりません。