From cb099cb4531a7fabf582446083b26b4576822af6 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Fri, 8 Nov 2013 16:35:10 +0100 Subject: [PATCH] Add ol.geom.MultiPolygon --- src/ol/geom/geometry.js | 4 +-- src/ol/geom/multipolygon.js | 67 +++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 src/ol/geom/multipolygon.js diff --git a/src/ol/geom/geometry.js b/src/ol/geom/geometry.js index a497ea6680..e3e534e76c 100644 --- a/src/ol/geom/geometry.js +++ b/src/ol/geom/geometry.js @@ -1,5 +1,4 @@ // FIXME add MultiPoint -// FIXME add MultiPolygon // FIXME add GeometryCollection // FIXME add Z and M support // FIXME use flat coordinate arrays @@ -17,7 +16,8 @@ ol.geom.GeometryType = { POINT: 'Point', LINE_STRING: 'LineString', POLYGON: 'Polygon', - MULTI_LINE_STRING: 'MultiLineString' + MULTI_LINE_STRING: 'MultiLineString', + MULTI_POLYGON: 'MultiPolygon' }; diff --git a/src/ol/geom/multipolygon.js b/src/ol/geom/multipolygon.js new file mode 100644 index 0000000000..5d0b6dca13 --- /dev/null +++ b/src/ol/geom/multipolygon.js @@ -0,0 +1,67 @@ +goog.provide('ol.geom.MultiPolygon'); + +goog.require('goog.asserts'); +goog.require('ol.extent'); +goog.require('ol.geom.Geometry'); + + + +/** + * @constructor + * @extends {ol.geom.Geometry} + * @param {Array.>>} ringss Ringss. + */ +ol.geom.MultiPolygon = function(ringss) { + + goog.base(this); + + /** + * @private + * @type {Array.>>} + */ + this.ringss_ = ringss; + +}; +goog.inherits(ol.geom.MultiPolygon, ol.geom.Geometry); + + +/** + * @inheritDoc + */ +ol.geom.MultiPolygon.prototype.getExtent = function(opt_extent) { + if (this.extentRevision != this.revision) { + this.extent = ol.extent.createOrUpdateEmpty(this.extent); + var ringss = this.ringss_; + var i, ii; + for (i = 0, ii = ringss.length; i < ii; ++i) { + ol.extent.extendRings(this.extent, ringss[i]); + } + } + goog.asserts.assert(goog.isDef(this.extent)); + return ol.extent.returnOrUpdate(this.extent, opt_extent); +}; + + +/** + * @return {Array.>>} Ringss. + */ +ol.geom.MultiPolygon.prototype.getRingss = function() { + return this.ringss_; +}; + + +/** + * @inheritDoc + */ +ol.geom.MultiPolygon.prototype.getType = function() { + return ol.geom.GeometryType.MULTI_POLYGON; +}; + + +/** + * @param {Array.>>} ringss Ringss. + */ +ol.geom.MultiPolygon.prototype.setRingss = function(ringss) { + this.ringss_ = ringss; + this.dispatchChangeEvent(); +};