私のサーバは、同じオブジェクトのいくつかの異なるPNG画像を静的に提供しています。それぞれ異なるスペクトルフィルタ(例えば赤いチャンネルまたは青いチャンネルのみ)で撮影されます。そのオブジェクトの滑らかで偽の色のついた地図を表示したいと思います。 Iそうのような3つの別々の画像ソースを作成することによってこれを行う:私は、使用するレイヤを作成ソースが変更されたときにOpenlayers-3ラスタレイヤーが変更されない
rgbSources = [rsource, gsource, bsource];
raster = new ol.source.Raster({
sources: rgbSources,
operation: function(bands, data) {
var rband = bands[0];
var gband = bands[1];
var bband = bands[2];
var composed = [
rband[0],
gband[0],
bband[0],
255
];
return composed;
}
});
:
extent = [0, 0, ncols, nrows];
pixelProjection = new ol.proj.Projection({
code: 'some-image',
units: 'pixels',
extent: extent
});
rsource = new ol.source.ImageStatic({
url: "static/imgs/band_1.png",
projection: pixelProjection,
imageExtent: extent
});
gsource = new ol.source.ImageStatic({
url: "static/imgs/band_2.png",
projection: pixelProjection,
imageExtent: extent
});
bsource = new ol.source.ImageStatic({
url: "static/imgs/band_3.png",
projection: pixelProjection,
imageExtent: extent
});
次に、私はそれを構成することができ、ラスタ源への入力としてこれらのソースを使用しますそのソースとして、このラスタ:
colorLayer = new ol.layer.Image({
source: raster
});
最後には、私はマップを作成し、マップに自分のラスタレイヤを追加することができます。
var map = new ol.Map({
target: 'map',
view: new ol.View({
center:ol.extent.getCenter(extent),
projection: pixelProjection,
zoom: 1.5
})
});
map.addLayer(colorLayer);
これまでのところとても良い!これは、期待どおりにイメージの色付きバージョンを表示します。この問題は、ユーザが引っ張る新しいチャネルインデックスを入力することによって、ユーザがカラーチャネルへの変更をトリガするときに発生する。私は青チャンネル変更のように扱う:
var index = 4; // actually gets passed in from user
bsource = new ol.source.ImageStatic({
url: "static/imgs/band_" + index + ".png",
projection: pixelProjection,
imageExtent: extent
});
rgbSources[2] = bsource; // this was in global scope from before
raster.sources = rgbSources; // as was this
期待される動作は、マップがすぐに色が変わってしまうということである、または私はやパンにズームが、それらのもののどちらが発生したときに、少なくともそれは変化するであろう。私は新しい色をまったく表示できません。私は間違ったことを更新していますか?おそらく、raster.sourcesフィールドには、見つけられない関連するセッター関数がありますか?