diff --git a/src/ol/view.js b/src/ol/view.js index d3a2691c61..b83a2e28d4 100644 --- a/src/ol/view.js +++ b/src/ol/view.js @@ -659,8 +659,22 @@ ol.View.prototype.getState = function() { ol.View.prototype.getZoom = function() { var zoom; var resolution = this.getResolution(); - if (resolution !== undefined && - resolution >= this.minResolution_ && resolution <= this.maxResolution_) { + if (resolution !== undefined) { + zoom = this.getZoomForResolution(resolution); + } + return zoom; +}; + + +/** + * Get the zoom level for a resolution. + * @param {number} resolution The resolution. + * @return {number|undefined} The zoom level for the provided resolution. + * @api + */ +ol.View.prototype.getZoomForResolution = function(resolution) { + var zoom; + if (resolution >= this.minResolution_ && resolution <= this.maxResolution_) { var offset = this.minZoom_ || 0; var max, zoomFactor; if (this.resolutions_) { diff --git a/test/spec/ol/view.test.js b/test/spec/ol/view.test.js index 6cabc88544..4196cac145 100644 --- a/test/spec/ol/view.test.js +++ b/test/spec/ol/view.test.js @@ -7,7 +7,6 @@ goog.require('ol.extent'); goog.require('ol.geom.LineString'); goog.require('ol.geom.Point'); - describe('ol.View', function() { describe('constructor (defaults)', function() { @@ -874,6 +873,37 @@ describe('ol.View', function() { }); }); + describe('#getZoomForResolution', function() { + + it('returns correct zoom levels', function() { + var view = new ol.View(); + var max = view.getMaxResolution(); + + expect(view.getZoomForResolution(max)).to.be(0); + + expect(view.getZoomForResolution(max / 2)).to.be(1); + + expect(view.getZoomForResolution(max / 4)).to.be(2); + }); + + it('returns correct zoom levels for specifically configured resolutions', function() { + var view = new ol.View({ + resolutions: [10, 8, 6, 4, 2] + }); + + expect(view.getZoomForResolution(10)).to.be(0); + + expect(view.getZoomForResolution(8)).to.be(1); + + expect(view.getZoomForResolution(6)).to.be(2); + + expect(view.getZoomForResolution(4)).to.be(3); + + expect(view.getZoomForResolution(2)).to.be(4); + }); + + }); + describe('#calculateExtent', function() { it('returns the expected extent', function() { var view = new ol.View({