diff --git a/src/ol/geom/geometry.exports b/src/ol/geom/geometry.exports index 8b5c29084d..f53f11edbc 100644 --- a/src/ol/geom/geometry.exports +++ b/src/ol/geom/geometry.exports @@ -1,4 +1,5 @@ @exportSymbol ol.geom.Geometry @exportProperty ol.geom.Geometry.prototype.getExtent @exportProperty ol.geom.Geometry.prototype.getLayout +@exportProperty ol.geom.Geometry.prototype.getSimplifiedGeometry @exportProperty ol.geom.Geometry.prototype.transform diff --git a/src/ol/geom/geometry.js b/src/ol/geom/geometry.js index a1a8f7e6d1..80a9b3cb88 100644 --- a/src/ol/geom/geometry.js +++ b/src/ol/geom/geometry.js @@ -5,6 +5,7 @@ goog.provide('ol.geom.Geometry'); goog.require('goog.asserts'); goog.require('goog.events.EventType'); goog.require('goog.functions'); +goog.require('goog.object'); goog.require('ol.Observable'); goog.require('ol.extent'); goog.require('ol.geom.flat'); @@ -80,6 +81,18 @@ ol.geom.Geometry = function() { */ this.extentRevision = -1; + /** + * @private + * @type {Object.} + */ + this.simplifiedGeometryCache_ = {}; + + /** + * @private + * @type {number} + */ + this.simplifiedGeometryRevision_ = 0; + }; goog.inherits(ol.geom.Geometry, ol.Observable); @@ -187,6 +200,41 @@ ol.geom.Geometry.prototype.getRevision = function() { }; +/** + * @param {number} squaredTolerance Squared tolerance. + * @return {ol.geom.Geometry} Simplified geometry. + */ +ol.geom.Geometry.prototype.getSimplifiedGeometry = function(squaredTolerance) { + if (this.simplifiedGeometryRevision_ != this.revision) { + goog.object.clear(this.simplifiedGeometryCache_); + this.simplifiedGeometryRevision_ = this.revision; + } + if (squaredTolerance < 0) { + return this; + } + var key = squaredTolerance.toString(); + if (this.simplifiedGeometryCache_.hasOwnProperty(key)) { + return this.simplifiedGeometryCache_[key]; + } else { + var simplifiedGeometry = + this.getSimplifiedGeometryInternal(squaredTolerance); + this.simplifiedGeometryCache_[key] = simplifiedGeometry; + return simplifiedGeometry; + } +}; + + +/** + * @param {number} squaredTolerance Squared tolerance. + * @return {ol.geom.Geometry} Simplified geometry. + * @protected + */ +ol.geom.Geometry.prototype.getSimplifiedGeometryInternal = + function(squaredTolerance) { + return this; +}; + + /** * @return {number} Stride. */