diff --git a/src/ol/geom/polygon.js b/src/ol/geom/polygon.js index 22fb475fc5..d3af928088 100644 --- a/src/ol/geom/polygon.js +++ b/src/ol/geom/polygon.js @@ -374,3 +374,23 @@ ol.geom.Polygon.circular = function(sphere, center, radius, opt_n) { ol.geom.GeometryLayout.XY, flatCoordinates, [flatCoordinates.length]); return polygon; }; + + +/** + * Create a polygon from an extent. The layout used is `XY`. + * @param {ol.Extent} extent The extent. + * @return {ol.geom.Polygon} The polygon. + * @api + */ +ol.geom.Polygon.fromExtent = function(extent) { + var minX = extent[0]; + var minY = extent[1]; + var maxX = extent[2]; + var maxY = extent[3]; + var flatCoordinates = + [minX, minY, minX, maxY, maxX, maxY, maxX, minY, minX, minY]; + var polygon = new ol.geom.Polygon(null); + polygon.setFlatCoordinates( + ol.geom.GeometryLayout.XY, flatCoordinates, [flatCoordinates.length]); + return polygon; +}; diff --git a/test/spec/ol/geom/polygon.test.js b/test/spec/ol/geom/polygon.test.js index fd1254dcb5..163d36ce87 100644 --- a/test/spec/ol/geom/polygon.test.js +++ b/test/spec/ol/geom/polygon.test.js @@ -399,6 +399,19 @@ describe('ol.geom.Polygon', function() { }); }); + describe('ol.geom.Polygon.fromExtent', function() { + it('creates the correct polygon', function() { + var extent = [1, 2, 3, 5]; + var polygon = ol.geom.Polygon.fromExtent(extent); + var flatCoordinates = polygon.getFlatCoordinates(); + expect(flatCoordinates).to.eql( + [1, 2, 1, 5, 3, 5, 3, 2, 1, 2]); + var orientedFlatCoordinates = polygon.getOrientedFlatCoordinates(); + expect(orientedFlatCoordinates).to.eql( + [1, 2, 1, 5, 3, 5, 3, 2, 1, 2]); + }); + }); + });