From ddfce24f0594fe7f0f6430c5d21960c69bbe0272 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Mon, 10 Mar 2014 15:56:16 +0100 Subject: [PATCH] Add ol.geom.MultiPoint#getPoint --- src/ol/geom/multipoint.exports | 1 + src/ol/geom/multipoint.js | 18 ++++++++++++++++++ test/spec/ol/geom/multipoint.test.js | 9 +++++++++ 3 files changed, 28 insertions(+) diff --git a/src/ol/geom/multipoint.exports b/src/ol/geom/multipoint.exports index 11a911aabb..b00ddcae09 100644 --- a/src/ol/geom/multipoint.exports +++ b/src/ol/geom/multipoint.exports @@ -2,6 +2,7 @@ @exportProperty ol.geom.MultiPoint.prototype.appendPoint @exportProperty ol.geom.MultiPoint.prototype.clone @exportProperty ol.geom.MultiPoint.prototype.getCoordinates +@exportProperty ol.geom.MultiPoint.prototype.getPoint @exportProperty ol.geom.MultiPoint.prototype.getPoints @exportProperty ol.geom.MultiPoint.prototype.getType @exportProperty ol.geom.MultiPoint.prototype.setCoordinates diff --git a/src/ol/geom/multipoint.js b/src/ol/geom/multipoint.js index 871dfa2ce5..931761f350 100644 --- a/src/ol/geom/multipoint.js +++ b/src/ol/geom/multipoint.js @@ -85,6 +85,24 @@ ol.geom.MultiPoint.prototype.getCoordinates = function() { }; +/** + * @param {number} index Index. + * @return {ol.geom.Point} Point. + */ +ol.geom.MultiPoint.prototype.getPoint = function(index) { + var n = goog.isNull(this.flatCoordinates) ? + 0 : this.flatCoordinates.length / this.stride; + goog.asserts.assert(0 <= index && index < n); + if (index < 0 || n <= index) { + return null; + } + var point = new ol.geom.Point(null); + point.setFlatCoordinates(this.layout, this.flatCoordinates.slice( + index * this.stride, (index + 1) * this.stride)); + return point; +}; + + /** * @return {Array.} Points. * @todo stability experimental diff --git a/test/spec/ol/geom/multipoint.test.js b/test/spec/ol/geom/multipoint.test.js index 5c2f66148e..26535273c6 100644 --- a/test/spec/ol/geom/multipoint.test.js +++ b/test/spec/ol/geom/multipoint.test.js @@ -132,6 +132,15 @@ describe('ol.geom.MultiPoint', function() { expect(multiPoint.getStride()).to.be(3); }); + it('can return individual points', function() { + var point0 = multiPoint.getPoint(0); + expect(point0.getLayout()).to.be(ol.geom.GeometryLayout.XYM); + expect(point0.getCoordinates()).to.eql([1, 2, 3]); + var point1 = multiPoint.getPoint(1); + expect(point1.getLayout()).to.be(ol.geom.GeometryLayout.XYM); + expect(point1.getCoordinates()).to.eql([4, 5, 6]); + }); + it('can return all points', function() { var points = multiPoint.getPoints(); expect(points).to.have.length(2);