diff --git a/src/ol/geom/multipolygon.js b/src/ol/geom/multipolygon.js index 4265e4de13..01d5a5c48c 100644 --- a/src/ol/geom/multipolygon.js +++ b/src/ol/geom/multipolygon.js @@ -50,6 +50,18 @@ ol.geom.MultiPolygon = function(coordinates, opt_layout) { */ this.maxDeltaRevision_ = -1; + /** + * @private + * @type {number} + */ + this.orientedRevision_ = -1; + + /** + * @private + * @type {Array.} + */ + this.orientedFlatCoordinates_ = null; + this.setCoordinates(coordinates, opt_layout); }; @@ -137,6 +149,26 @@ ol.geom.MultiPolygon.prototype.getInteriorPoints = function() { }; +/** + * @return {Array.} Oriented flat coordinates. + */ +ol.geom.MultiPolygon.prototype.getOrientedFlatCoordinates = function() { + if (this.orientedRevision_ != this.getRevision()) { + var flatCoordinates = this.flatCoordinates; + if (ol.geom.flat.linearRingssAreOriented( + flatCoordinates, 0, this.endss_, this.stride)) { + this.orientedFlatCoordinates_ = flatCoordinates; + } else { + this.orientedFlatCoordinates_ = flatCoordinates.slice(); + this.orientedFlatCoordinates_.length = ol.geom.flat.orientLinearRingss( + this.orientedFlatCoordinates_, 0, this.endss_, this.stride); + } + this.orientedRevision_ = this.getRevision(); + } + return this.orientedFlatCoordinates_; +}; + + /** * @inheritDoc */