From 680372ac3f69b0e81d5f0abf2e48c81d87c10d63 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Wed, 25 Sep 2019 17:26:22 +0200 Subject: [PATCH] Return a new simplified geometry after modification --- src/ol/geom/Geometry.js | 15 ++++++++++++- test/spec/ol/geom/point.test.js | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/ol/geom/Geometry.js b/src/ol/geom/Geometry.js index c49f2f929a..1ea1a1863a 100644 --- a/src/ol/geom/Geometry.js +++ b/src/ol/geom/Geometry.js @@ -60,12 +60,13 @@ class Geometry extends BaseObject { /** * Get a transformed and simplified version of the geometry. * @abstract + * @param {number} revision The geometry revision. * @param {number} squaredTolerance Squared tolerance. * @param {import("../proj/Projection.js").default} sourceProjection The source projection. * @param {import("../proj/Projection.js").default} destProjection The destination projection. * @return {Geometry} Simplified geometry. */ - this.simplifyTransformed = memoizeOne(function(squaredTolerance, sourceProjection, destProjection) { + this.simplifyTransformedInternal = memoizeOne(function(revision, squaredTolerance, sourceProjection, destProjection) { if (!sourceProjection || !destProjection) { return this.getSimplifiedGeometry(squaredTolerance); } @@ -77,6 +78,18 @@ class Geometry extends BaseObject { } + /** + * Get a transformed and simplified version of the geometry. + * @abstract + * @param {number} squaredTolerance Squared tolerance. + * @param {import("../proj/Projection.js").default} sourceProjection The source projection. + * @param {import("../proj/Projection.js").default} destProjection The destination projection. + * @return {Geometry} Simplified geometry. + */ + simplifyTransformed(squaredTolerance, sourceProjection, destProjection) { + return this.simplifyTransformedInternal(this.getRevision(), squaredTolerance, sourceProjection, destProjection); + } + /** * Make a complete copy of the geometry. * @abstract diff --git a/test/spec/ol/geom/point.test.js b/test/spec/ol/geom/point.test.js index 3865b5ccd5..67a3edf232 100644 --- a/test/spec/ol/geom/point.test.js +++ b/test/spec/ol/geom/point.test.js @@ -1,4 +1,5 @@ import Point from '../../../../src/ol/geom/Point.js'; +import {get as getProjection} from '../../../../src/ol/proj.js'; describe('ol.geom.Point', function() { @@ -154,6 +155,42 @@ describe('ol.geom.Point', function() { }); + describe('#simplifyTransformed()', function() { + + it('returns the same result if called twice with the same arguments', function() { + const geom = new Point([1, 2]); + const source = getProjection('EPSG:4326'); + const dest = getProjection('EPSG:3857'); + const squaredTolerance = 0.5; + const first = geom.simplifyTransformed(squaredTolerance, source, dest); + const second = geom.simplifyTransformed(squaredTolerance, source, dest); + expect(second).to.be(first); + }); + + it('returns a different result if called with a different tolerance', function() { + const geom = new Point([1, 2]); + const source = getProjection('EPSG:4326'); + const dest = getProjection('EPSG:3857'); + const squaredTolerance = 0.5; + const first = geom.simplifyTransformed(squaredTolerance, source, dest); + const second = geom.simplifyTransformed(squaredTolerance * 2, source, dest); + expect(second).not.to.be(first); + }); + + it('returns a different result if called after geometry modification', function() { + const geom = new Point([1, 2]); + const source = getProjection('EPSG:4326'); + const dest = getProjection('EPSG:3857'); + const squaredTolerance = 0.5; + const first = geom.simplifyTransformed(squaredTolerance, source, dest); + + geom.setCoordinates([3, 4]); + const second = geom.simplifyTransformed(squaredTolerance * 2, source, dest); + expect(second).not.to.be(first); + }); + + }); + describe('#applyTransform()', function() { let point, transform;