Skip to content

Commit

Permalink
Layer groups are now synchronized
Browse files Browse the repository at this point in the history
  • Loading branch information
petrsloup committed Aug 14, 2014
1 parent dd0b1c0 commit f2709f2
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 8 deletions.
2 changes: 1 addition & 1 deletion examples/rastersync.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ var layer2 = new ol.layer.Tile({
})
});
var ol2d = new ol.Map({
layers: [layer0, layer1, layer2],
layers: [layer0, new ol.layer.Group({layers: [layer1, layer2]})],
target: 'map2d',
view: view,
renderer: 'webgl'
Expand Down
29 changes: 22 additions & 7 deletions src/rastersynchronizer.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,26 +57,37 @@ olcs.RasterSynchronizer.prototype.synchronize = function() {

var viewProj = this.view_.getProjection();

this.olLayers_.forEach(function(el, i, arr) {
var olLayerId = goog.getUid(el);
var synchronizeLayer = goog.bind(function(olLayer) {
// handle layer groups
if (olLayer instanceof ol.layer.Group) {
var sublayers = olLayer.getLayers();
if (goog.isDef(sublayers)) {
sublayers.forEach(function(el, i, arr) {
synchronizeLayer(el);
});
}
return;
}

var olLayerId = goog.getUid(olLayer);
var cesiumLayer = this.layerMap_[olLayerId];

// no mapping -> create new layer and set up synchronization
if (!goog.isDef(cesiumLayer)) {
cesiumLayer = olcs.RasterSynchronizer.createCorrespondingLayer(el,
cesiumLayer = olcs.RasterSynchronizer.createCorrespondingLayer(olLayer,
viewProj);
olcs.RasterSynchronizer.syncLayerProperties(el, cesiumLayer);
olcs.RasterSynchronizer.syncLayerProperties(olLayer, cesiumLayer);
if (!goog.isNull(cesiumLayer)) {
goog.events.listen(el,
goog.events.listen(olLayer,
['change:brightness', 'change:contrast', 'change:hue',
'change:opacity', 'change:saturation', 'change:visible'],
function(e) {
olcs.RasterSynchronizer.syncLayerProperties(el, cesiumLayer);
olcs.RasterSynchronizer.syncLayerProperties(olLayer, cesiumLayer);
});

// there is no way to modify Cesium layer extent,
// we have to recreate when ol3 layer extent changes:
goog.events.listen(el, 'change:extent', function(e) {
goog.events.listen(olLayer, 'change:extent', function(e) {
this.cesiumLayers_.remove(cesiumLayer, true); // destroy
delete this.layerMap_[olLayerId]; // invalidate the map entry
this.synchronize();
Expand All @@ -92,6 +103,10 @@ olcs.RasterSynchronizer.prototype.synchronize = function() {
}
}, this);

this.olLayers_.forEach(function(el, i, arr) {
synchronizeLayer(el);
});

// destroy unused Cesium ImageryLayers
goog.array.forEach(goog.object.getValues(unusedCesiumLayers),
function(el, i, arr) {
Expand Down

0 comments on commit f2709f2

Please sign in to comment.