From 0bf34a52ff05cf545c2e32888798d9139c580708 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Fri, 20 Dec 2013 16:33:26 +0100 Subject: [PATCH] Add ol.geom.MultiLineString#setLineStrings --- src/ol/geom/multilinestring.js | 25 +++++++++++++++++++++++ test/spec/ol/geom/multilinestring.test.js | 17 +++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/ol/geom/multilinestring.js b/src/ol/geom/multilinestring.js index 18b00c2eb6..98cfb3402d 100644 --- a/src/ol/geom/multilinestring.js +++ b/src/ol/geom/multilinestring.js @@ -1,5 +1,7 @@ goog.provide('ol.geom.MultiLineString'); +goog.require('goog.array'); +goog.require('goog.asserts'); goog.require('ol.extent'); goog.require('ol.geom.LineString'); goog.require('ol.geom.SimpleGeometry'); @@ -163,3 +165,26 @@ ol.geom.MultiLineString.prototype.setFlatCoordinates = this.ends_ = ends; this.dispatchChangeEvent(); }; + + +/** + * @param {Array.} lineStrings LineStrings. + */ +ol.geom.MultiLineString.prototype.setLineStrings = function(lineStrings) { + var layout = ol.geom.GeometryLayout.XY; + var flatCoordinates = []; + var ends = []; + var i, ii; + for (i = 0, ii = lineStrings.length; i < ii; ++i) { + var lineString = lineStrings[i]; + if (i === 0) { + layout = lineString.getLayout(); + } else { + // FIXME better handle the case of non-matching layouts + goog.asserts.assert(lineString.getLayout() == layout); + } + goog.array.extend(flatCoordinates, lineString.getFlatCoordinates()); + ends.push(flatCoordinates.length); + } + this.setFlatCoordinates(layout, flatCoordinates, ends); +}; diff --git a/test/spec/ol/geom/multilinestring.test.js b/test/spec/ol/geom/multilinestring.test.js index 1b7e67a3f2..b92928eb14 100644 --- a/test/spec/ol/geom/multilinestring.test.js +++ b/test/spec/ol/geom/multilinestring.test.js @@ -168,8 +168,25 @@ describe('ol.geom.MultiLineString', function() { }); + describe('#setLineStrings', function() { + + it('sets the line strings', function() { + var multiLineString = new ol.geom.MultiLineString(null); + var lineString1 = new ol.geom.LineString([[1, 2], [3, 4]]); + var lineString2 = new ol.geom.LineString([[5, 6], [7, 8]]); + multiLineString.setLineStrings([lineString1, lineString2]); + expect(multiLineString.getFlatCoordinates()).to.eql( + [1, 2, 3, 4, 5, 6, 7, 8]); + expect(multiLineString.getEnds()).to.eql([4, 8]); + var coordinates = multiLineString.getCoordinates(); + expect(coordinates[0]).to.eql(lineString1.getCoordinates()); + expect(coordinates[1]).to.eql(lineString2.getCoordinates()); + }); + }); + }); goog.require('ol.extent'); +goog.require('ol.geom.LineString'); goog.require('ol.geom.MultiLineString');