diff --git a/examples/style-rules.js b/examples/style-rules.js index f701fca3ec..c730704afc 100644 --- a/examples/style-rules.js +++ b/examples/style-rules.js @@ -22,7 +22,8 @@ var style = new ol.style.Style({rules: [ new ol.style.Stroke({ color: ol.expr.parse('color'), width: 4, - opacity: 1 + opacity: 1, + zIndex: 1 }) ] }), diff --git a/src/ol/layer/vectorlayer.js b/src/ol/layer/vectorlayer.js index 2201146827..9ad39644ef 100644 --- a/src/ol/layer/vectorlayer.js +++ b/src/ol/layer/vectorlayer.js @@ -320,6 +320,7 @@ ol.layer.Vector.prototype.groupFeaturesBySymbolizerLiteral = } } } + featuresBySymbolizer.sort(this.sortByZIndex); return featuresBySymbolizer; }; @@ -454,6 +455,17 @@ ol.layer.Vector.prototype.setTemporary = function(temp) { }; +/** + * Sort function for `groupFeaturesBySymbolizerLiteral`. + * @param {Array} a 1st item for the sort comparison. + * @param {Array} b 2nd item for the sort comparison. + * @return {number} Comparison result. + */ +ol.layer.Vector.prototype.sortByZIndex = function(a, b) { + return a[1].zIndex - b[1].zIndex; +}; + + /** * @param {Array.} features Features. * @return {string} Feature info. diff --git a/test/spec/ol/layer/vectorlayer.test.js b/test/spec/ol/layer/vectorlayer.test.js index f20b90e9da..84435a6d72 100644 --- a/test/spec/ol/layer/vectorlayer.test.js +++ b/test/spec/ol/layer/vectorlayer.test.js @@ -115,6 +115,34 @@ describe('ol.layer.Vector', function() { }); + it('sorts groups by zIndex', function() { + var symbolizer = new ol.style.Stroke({ + width: 3, + color: '#BADA55', + opacity: 1, + zIndex: 1 + }); + var anotherSymbolizer = new ol.style.Stroke({ + width: 3, + color: '#BADA55', + opacity: 1 + }); + var featureWithSymbolizers = new ol.Feature({ + g: new ol.geom.LineString([[-10, -10], [-10, 10]]) + }); + featureWithSymbolizers.setSymbolizers([symbolizer]); + var anotherFeatureWithSymbolizers = new ol.Feature({ + g: new ol.geom.LineString([[-10, 10], [-10, -10]]) + }); + anotherFeatureWithSymbolizers.setSymbolizers([anotherSymbolizer]); + features = [featureWithSymbolizers, anotherFeatureWithSymbolizers]; + + var groups = layer.groupFeaturesBySymbolizerLiteral(features, 1); + expect(groups).to.have.length(2); + expect(groups[0][1].zIndex).to.be(0); + expect(groups[1][1].zIndex).to.be(1); + }); + goog.dispose(layer); });