diff --git a/src/ol/view.js b/src/ol/view.js index e361454233..10c89dad12 100644 --- a/src/ol/view.js +++ b/src/ol/view.js @@ -275,15 +275,17 @@ ol.View.prototype.getHints = function() { * @api stable */ ol.View.prototype.calculateExtent = function(size) { - goog.asserts.assert(this.isDef(), - 'the view was not defined (had no center and/or resolution)'); var center = this.getCenter(); + goog.asserts.assert(goog.isDefAndNotNull(center), + 'The view center is not defined'); var resolution = this.getResolution(); - var minX = center[0] - resolution * size[0] / 2; - var maxX = center[0] + resolution * size[0] / 2; - var minY = center[1] - resolution * size[1] / 2; - var maxY = center[1] + resolution * size[1] / 2; - return [minX, minY, maxX, maxY]; + goog.asserts.assert(goog.isDef(resolution), + 'The view resolution is not defined'); + var rotation = this.getRotation(); + goog.asserts.assert(goog.isDef(rotation), + 'The view rotation is not defined'); + + return ol.extent.getForViewAndSize(center, resolution, rotation, size); }; diff --git a/test/spec/ol/view.test.js b/test/spec/ol/view.test.js index 061382b3dc..d9e94f950c 100644 --- a/test/spec/ol/view.test.js +++ b/test/spec/ol/view.test.js @@ -364,6 +364,35 @@ describe('ol.View', function() { }); }); + describe('#calculateExtent', function() { + it('returns the expect extent', function() { + var view = new ol.View({ + resolutions: [512], + zoom: 0, + center: [0, 0] + }); + + var extent = view.calculateExtent([100, 200]); + expect(extent[0]).to.be(-25600); + expect(extent[1]).to.be(-51200); + expect(extent[2]).to.be(25600); + expect(extent[3]).to.be(51200); + }); + it('returns the expected extent with rotation', function() { + var view = new ol.View({ + resolutions: [512], + zoom: 0, + center: [0, 0], + rotation: Math.PI / 2 + }); + var extent = view.calculateExtent([100, 200]); + expect(extent[0]).to.roughlyEqual(-51200, 1e-9); + expect(extent[1]).to.roughlyEqual(-25600, 1e-9); + expect(extent[2]).to.roughlyEqual(51200, 1e-9); + expect(extent[3]).to.roughlyEqual(25600, 1e-9); + }); + }); + describe('fit', function() { var view; beforeEach(function() {