rotation support for ol.View#calculateExtent

This commit is contained in:
vmalaret
2015-05-08 17:58:59 -04:00
committed by Bart van den Eijnden
parent 74759142d9
commit e7cd691362
2 changed files with 38 additions and 7 deletions

View File

@@ -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);
};

View File

@@ -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() {