diff --git a/src/ol/View.js b/src/ol/View.js index 0faf434d73..c09bf01cd3 100644 --- a/src/ol/View.js +++ b/src/ol/View.js @@ -416,10 +416,11 @@ class View extends BaseObject { * @param {ViewOptions} options View options. */ applyOptions_(options) { - /** - * @type {Object} - */ - const properties = {}; + const properties = assign({}, options); + for (const key in ViewProperty) { + delete properties[key]; + } + this.setProperties(properties, true); const resolutionConstraintInfo = createResolutionConstraint(options); @@ -482,14 +483,6 @@ class View extends BaseObject { } else if (options.zoom !== undefined) { this.setZoom(options.zoom); } - - this.setProperties(properties); - - /** - * @private - * @type {ViewOptions} - */ - this.options_ = options; } /** @@ -531,7 +524,7 @@ class View extends BaseObject { * @return {ViewOptions} New options updated with the current view state. */ getUpdatedOptions_(newOptions) { - const options = assign({}, this.options_); + const options = this.getProperties(); // preserve resolution (or zoom) if (options.resolution !== undefined) { @@ -973,7 +966,7 @@ class View extends BaseObject { * @return {boolean} Resolution constraint is set */ getConstrainResolution() { - return this.options_.constrainResolution; + return this.get('constrainResolution'); } /** @@ -1736,6 +1729,7 @@ class View extends BaseObject { } if (this.get(ViewProperty.RESOLUTION) !== newResolution) { this.set(ViewProperty.RESOLUTION, newResolution); + this.set('zoom', this.getZoom(), true); } if ( !newCenter || diff --git a/test/browser/spec/ol/View.test.js b/test/browser/spec/ol/View.test.js index 7246d8b85d..1bb95219ca 100644 --- a/test/browser/spec/ol/View.test.js +++ b/test/browser/spec/ol/View.test.js @@ -617,6 +617,23 @@ describe('ol/View', function () { expect(options.zoom).to.eql(10); }); + it('returns the current properties with getProperties()', function () { + const view = new View({ + center: [0, 0], + minZoom: 2, + zoom: 10, + }); + view.setZoom(8); + view.setCenter([1, 2]); + view.setRotation(1); + + const options = view.getProperties(); + expect(options.minZoom).to.eql(2); + expect(options.zoom).to.eql(8); + expect(options.center).to.eql([1, 2]); + expect(options.rotation).to.eql(1); + }); + it('applies the current zoom', function () { const view = new View({ center: [0, 0], @@ -1874,8 +1891,8 @@ describe('ol/View', function () { expect(view.getCenter()[1]).to.be(1500); }); it('fits correctly to the extent when a view extent is configured', function () { - view.options_.extent = [1500, 0, 2500, 10000]; - view.applyOptions_(view.options_); + view.set('extent', [1500, 0, 2500, 10000]); + view.applyOptions_(view.getProperties()); view.fit([1000, 1000, 2000, 2000]); expect(view.calculateExtent()).eql([1500, 1000, 2500, 2000]); });