diff --git a/src/ol/geom/polygon.js b/src/ol/geom/polygon.js index b361fd7f34..7f2b1430d3 100644 --- a/src/ol/geom/polygon.js +++ b/src/ol/geom/polygon.js @@ -22,6 +22,18 @@ ol.geom.Polygon = function(coordinates, opt_layout) { */ this.ends_ = []; + /** + * @private + * @type {number} + */ + this.interiorPointRevision_ = -1; + + /** + * @private + * @type {ol.Coordinate} + */ + this.interiorPoint_ = null; + this.setCoordinates(coordinates, opt_layout); }; @@ -58,10 +70,14 @@ ol.geom.Polygon.prototype.getEnds = function() { * @return {ol.Coordinate} Interior point. */ ol.geom.Polygon.prototype.getInteriorPoint = function() { - var extent = this.getExtent(); - var y = (extent[1] + extent[3]) / 2; - return ol.geom.flat.linearRingsGetInteriorPoint( - this.flatCoordinates, 0, this.ends_, this.stride, y); + if (this.interiorPointRevision_ != this.revision) { + var extent = this.getExtent(); + var y = (extent[1] + extent[3]) / 2; + this.interiorPoint_ = ol.geom.flat.linearRingsGetInteriorPoint( + this.flatCoordinates, 0, this.ends_, this.stride, y); + this.interiorPointRevision_ = this.revision; + } + return this.interiorPoint_; };