diff --git a/src/ol/geom/multipoint.js b/src/ol/geom/multipoint.js index 7903c010b2..871dfa2ce5 100644 --- a/src/ol/geom/multipoint.js +++ b/src/ol/geom/multipoint.js @@ -90,12 +90,16 @@ ol.geom.MultiPoint.prototype.getCoordinates = function() { * @todo stability experimental */ ol.geom.MultiPoint.prototype.getPoints = function() { - // FIXME we should construct the points from the flat coordinates - var coordinates = this.getCoordinates(); + var flatCoordinates = this.flatCoordinates; + var layout = this.layout; + var stride = this.stride; + /** @type {Array.} */ var points = []; var i, ii; - for (i = 0, ii = coordinates.length; i < ii; ++i) { - points.push(new ol.geom.Point(coordinates[i])); + for (i = 0, ii = flatCoordinates.length; i < ii; i += stride) { + var point = new ol.geom.Point(null); + point.setFlatCoordinates(layout, flatCoordinates.slice(i, i + stride)); + points.push(point); } return points; }; diff --git a/test/spec/ol/geom/multipoint.test.js b/test/spec/ol/geom/multipoint.test.js index 476fabb6d7..5c2f66148e 100644 --- a/test/spec/ol/geom/multipoint.test.js +++ b/test/spec/ol/geom/multipoint.test.js @@ -132,6 +132,17 @@ describe('ol.geom.MultiPoint', function() { expect(multiPoint.getStride()).to.be(3); }); + it('can return all points', function() { + var points = multiPoint.getPoints(); + expect(points).to.have.length(2); + expect(points[0]).to.be.an(ol.geom.Point); + expect(points[0].getLayout()).to.be(ol.geom.GeometryLayout.XYM); + expect(points[0].getCoordinates()).to.eql([1, 2, 3]); + expect(points[1]).to.be.an(ol.geom.Point); + expect(points[1].getLayout()).to.be(ol.geom.GeometryLayout.XYM); + expect(points[1].getCoordinates()).to.eql([4, 5, 6]); + }); + }); describe('construct with 4D coordinates', function() {