diff --git a/src/ol/view.js b/src/ol/view.js index b71df62b2b..23292bcc24 100644 --- a/src/ol/view.js +++ b/src/ol/view.js @@ -702,6 +702,10 @@ ol.View.prototype.fit = function(geometryOrExtent, opt_options) { ol.asserts.assert(!ol.extent.isEmpty(geometryOrExtent), 25); // Cannot fit empty extent provided as `geometry` geometry = ol.geom.Polygon.fromExtent(geometryOrExtent); + } else if (geometryOrExtent.getType() === ol.geom.GeometryType.CIRCLE) { + geometryOrExtent = geometryOrExtent.getExtent(); + geometry = ol.geom.Polygon.fromExtent(geometryOrExtent); + geometry.rotate(this.getRotation(), ol.extent.getCenter(geometryOrExtent)); } else { geometry = geometryOrExtent; } diff --git a/test/spec/ol/view.test.js b/test/spec/ol/view.test.js index 81e9c96871..4432729727 100644 --- a/test/spec/ol/view.test.js +++ b/test/spec/ol/view.test.js @@ -968,6 +968,21 @@ describe('ol.View', function() { expect(view.getCenter()[0]).to.be(5900); expect(view.getCenter()[1]).to.be(46100); + view.fit( + new ol.geom.Circle([6000, 46000], 1000), + {size: [200, 200], constrainResolution: false}); + expect(view.getResolution()).to.be(10); + expect(view.getCenter()[0]).to.be(6000); + expect(view.getCenter()[1]).to.be(46000); + + view.setRotation(Math.PI / 8); + view.fit( + new ol.geom.Circle([6000, 46000], 1000), + {size: [200, 200], constrainResolution: false}); + expect(view.getResolution()).to.roughlyEqual(10, 1e-9); + expect(view.getCenter()[0]).to.roughlyEqual(6000, 1e-9); + expect(view.getCenter()[1]).to.roughlyEqual(46000, 1e-9); + view.setRotation(Math.PI / 4); view.fit( new ol.geom.LineString([[6000, 46000], [6000, 47100], [7000, 46000]]),