diff --git a/src/ol/geom/polygon.js b/src/ol/geom/polygon.js index 1a4f7ff944..2db8dced32 100644 --- a/src/ol/geom/polygon.js +++ b/src/ol/geom/polygon.js @@ -3,6 +3,7 @@ goog.provide('ol.geom.Polygon'); goog.require('ol.geom.Geometry'); goog.require('ol.geom.LinearRing'); goog.require('ol.geom.flat'); +goog.require('ol.geom.simplify'); @@ -104,6 +105,23 @@ ol.geom.Polygon.prototype.getLinearRings = function() { }; +/** + * @inheritDoc + */ +ol.geom.Polygon.prototype.getSimplifiedGeometryInternal = + function(squaredTolerance) { + var simplifiedFlatCoordinates = []; + var simplifiedEnds = []; + simplifiedFlatCoordinates.length = ol.geom.simplify.douglasPeuckers( + this.flatCoordinates, 0, this.ends_, this.stride, squaredTolerance, + simplifiedFlatCoordinates, 0, simplifiedEnds); + var simplifiedPolygon = new ol.geom.Polygon(null); + simplifiedPolygon.setFlatCoordinates( + ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEnds); + return simplifiedPolygon; +}; + + /** * @inheritDoc */ diff --git a/test/spec/ol/geom/polygon.test.js b/test/spec/ol/geom/polygon.test.js index 632888fe63..a4410ff881 100644 --- a/test/spec/ol/geom/polygon.test.js +++ b/test/spec/ol/geom/polygon.test.js @@ -310,6 +310,35 @@ describe('ol.geom.Polygon', function() { }); + describe('with a simple polygon', function() { + + var polygon; + beforeEach(function() { + polygon = new ol.geom.Polygon( + [[[3, 0], [1, 3], [0, 6], [2, 6], [3, 7], [4, 6], [6, 6], [4, 3]]]); + }); + + describe('#getSimplifiedGeometry', function() { + + it('returns the expected result', function() { + var simplifiedGeometry = polygon.getSimplifiedGeometry(1); + expect(simplifiedGeometry).to.be.an(ol.geom.Polygon); + expect(simplifiedGeometry.getCoordinates()).to.eql( + [[[3, 0], [0, 6], [6, 6], [4, 3]]]); + }); + + it('caches multiple simplified geometries', function() { + var simplifiedGeometry1 = polygon.getSimplifiedGeometry(1); + var simplifiedGeometry2 = polygon.getSimplifiedGeometry(2); + var simplifiedGeometry3 = polygon.getSimplifiedGeometry(1); + var simplifiedGeometry4 = polygon.getSimplifiedGeometry(2); + expect(simplifiedGeometry1).to.be(simplifiedGeometry3); + expect(simplifiedGeometry2).to.be(simplifiedGeometry4); + }); + + }); + }); + });