From 7a51b4c7b6ca24a9fe0797bc4eb9846da899ef1e Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Mon, 10 Mar 2014 16:18:12 +0100 Subject: [PATCH] Add ol.geom.MultiLineString#appendLineString --- src/ol/geom/multilinestring.exports | 1 + src/ol/geom/multilinestring.js | 16 ++++++++++++++++ test/spec/ol/geom/multilinestring.test.js | 11 +++++++++++ 3 files changed, 28 insertions(+) diff --git a/src/ol/geom/multilinestring.exports b/src/ol/geom/multilinestring.exports index aa3eb024a0..9390428f2a 100644 --- a/src/ol/geom/multilinestring.exports +++ b/src/ol/geom/multilinestring.exports @@ -1,4 +1,5 @@ @exportSymbol ol.geom.MultiLineString +@exportProperty ol.geom.MultiLineString.prototype.appendLineString @exportProperty ol.geom.MultiLineString.prototype.clone @exportProperty ol.geom.MultiLineString.prototype.getCoordinateAtM @exportProperty ol.geom.MultiLineString.prototype.getCoordinates diff --git a/src/ol/geom/multilinestring.js b/src/ol/geom/multilinestring.js index 4c825db9a3..816abef889 100644 --- a/src/ol/geom/multilinestring.js +++ b/src/ol/geom/multilinestring.js @@ -47,6 +47,22 @@ ol.geom.MultiLineString = function(coordinates, opt_layout) { goog.inherits(ol.geom.MultiLineString, ol.geom.SimpleGeometry); +/** + * @param {ol.geom.LineString} lineString LineString. + */ +ol.geom.MultiLineString.prototype.appendLineString = function(lineString) { + goog.asserts.assert(lineString.getLayout() == this.layout); + if (goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = lineString.getFlatCoordinates().slice(); + } else { + goog.array.extend( + this.flatCoordinates, lineString.getFlatCoordinates().slice()); + } + this.ends_.push(this.flatCoordinates.length); + this.dispatchChangeEvent(); +}; + + /** * @inheritDoc */ diff --git a/test/spec/ol/geom/multilinestring.test.js b/test/spec/ol/geom/multilinestring.test.js index cfa2a2c853..76d18f9ec1 100644 --- a/test/spec/ol/geom/multilinestring.test.js +++ b/test/spec/ol/geom/multilinestring.test.js @@ -37,6 +37,17 @@ describe('ol.geom.MultiLineString', function() { expect(multiLineString.getStride()).to.be(2); }); + it('can append line strings', function() { + multiLineString.appendLineString( + new ol.geom.LineString([[1, 2], [3, 4]])); + expect(multiLineString.getCoordinates()).to.eql( + [[[1, 2], [3, 4]]]); + multiLineString.appendLineString( + new ol.geom.LineString([[5, 6], [7, 8]])); + expect(multiLineString.getCoordinates()).to.eql( + [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]); + }); + }); describe('construct with 2D coordinates', function() {