Sunucum, her biri farklı bir spektral filtre (örneğin, yalnızca kırmızı bir kanal veya yalnızca mavi bir kanal) ile çekilen aynı nesnenin birkaç farklı PNG görüntüsünü statik olarak yayınlıyor. Bu nesnenin kaygan, sahte renkli bir haritasını göstermek istiyorum. Öyle gibi üç ayrı görüntüler kaynaklar oluşturarak bunu:Openlayers-3 Raster Layer Kaynaklar değiştiğinde değişmiyor
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
});
Sonraki, onları oluşturabilirsiniz hangi bir tarama kaynağına giriş olarak bu kaynakları kullanın:
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;
}
});
Sonra kullanan bir katman oluşturun kaynak olarak bu raster:
colorLayer = new ol.layer.Image({
source: raster
});
Son olarak, bir harita oluşturmak ve haritaya benim raster katmanı ekleyebilirsiniz:
var map = new ol.Map({
target: 'map',
view: new ol.View({
center:ol.extent.getCenter(extent),
projection: pixelProjection,
zoom: 1.5
})
});
map.addLayer(colorLayer);
Şimdiye kadar çok iyi! Bu, görüntünün renklendirilmiş halini beklendiği gibi görüntüler. Sorun, kullanıcı çekilecek yeni bir kanal indeksi girerek bir renk kanalında bir değişikliği tetiklediğinde ortaya çıkar. Mavi bir kanal değişikliği böyle idare:
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
Beklenen davranış haritası derhal renklerini değiştirmek olacağını, ya da ben ya da tavada yakınlaştırmak ancak Bunlardan hiçbiri gerçekleştiğinde en azından o değişirdi. Yeni renklerin görünmesini sağlayamıyorum. Yanlış şeyi mi güncelliyorum? Belki de raster.sources alanının, bulamadığım ilişkili bir işlev işlevi var mı?