diff --git a/src/ol/view2d.exports b/src/ol/view2d.exports index 025b16b9b9..9065c75a51 100644 --- a/src/ol/view2d.exports +++ b/src/ol/view2d.exports @@ -4,4 +4,5 @@ @exportProperty ol.View2D.prototype.constrainRotation @exportProperty ol.View2D.prototype.fitExtent @exportProperty ol.View2D.prototype.getView2D +@exportProperty ol.View2D.prototype.getZoom @exportProperty ol.View2D.prototype.setZoom diff --git a/src/ol/view2d.js b/src/ol/view2d.js index 87c19dad1f..57f4a976b4 100644 --- a/src/ol/view2d.js +++ b/src/ol/view2d.js @@ -363,6 +363,31 @@ ol.View2D.prototype.getView3D = function() { }; +/** + * Get the current zoom level. Return undefined if the current + * resolution is undefined or not a "constrained resolution". + * @return {number|undefined} Zoom. + */ +ol.View2D.prototype.getZoom = function() { + var zoom; + var resolution = this.getResolution(); + + if (goog.isDef(resolution)) { + var res, z = 0; + do { + res = this.constrainResolution(this.maxResolution_, z); + if (res == resolution) { + zoom = z; + break; + } + ++z; + } while (res > this.minResolution_); + } + + return zoom; +}; + + /** * Fit the given extent based on the given map size. * @param {ol.Extent} extent Extent. diff --git a/test/spec/ol/view2d.test.js b/test/spec/ol/view2d.test.js index e64f75fc0e..64c192c962 100644 --- a/test/spec/ol/view2d.test.js +++ b/test/spec/ol/view2d.test.js @@ -70,6 +70,38 @@ describe('ol.View2D', function() { }); }); + + describe('#getZoom', function() { + var view; + beforeEach(function() { + view = new ol.View2D({ + resolutions: [512, 256, 128, 64, 32, 16] + }); + }); + + it('returns correct zoom levels', function() { + view.setResolution(undefined); + expect(view.getZoom()).to.be(undefined); + + view.setResolution(511); + expect(view.getZoom()).to.be(undefined); + + view.setResolution(512); + expect(view.getZoom()).to.be(0); + + view.setResolution(64); + expect(view.getZoom()).to.be(3); + + view.setResolution(65); + expect(view.getZoom()).to.be(undefined); + + view.setResolution(16); + expect(view.getZoom()).to.be(5); + + view.setResolution(15); + expect(view.getZoom()).to.be(undefined); + }); + }); }); goog.require('ol.View2D');