From 0ec0491ef68b3581ae7fed3bf92716c30fb87f7b Mon Sep 17 00:00:00 2001 From: ahocevar Date: Sat, 7 Jul 2018 17:12:12 +0200 Subject: [PATCH] Accept flat coordinates in LinearRing constructor --- src/ol/format/GMLBase.js | 6 +----- src/ol/geom/LinearRing.js | 45 ++++++++++++++------------------------- src/ol/geom/Polygon.js | 9 +++----- 3 files changed, 20 insertions(+), 40 deletions(-) diff --git a/src/ol/format/GMLBase.js b/src/ol/format/GMLBase.js index 104f4c8237..57044a7adb 100644 --- a/src/ol/format/GMLBase.js +++ b/src/ol/format/GMLBase.js @@ -418,11 +418,7 @@ GMLBase.prototype.readFlatLinearRing_ = function(node, objectStack) { GMLBase.prototype.readLinearRing = function(node, objectStack) { const flatCoordinates = this.readFlatCoordinatesFromNode_(node, objectStack); if (flatCoordinates) { - const ring = new LinearRing(null); - ring.setFlatCoordinates(GeometryLayout.XYZ, flatCoordinates); - return ring; - } else { - return undefined; + return new LinearRing(flatCoordinates, GeometryLayout.XYZ); } }; diff --git a/src/ol/geom/LinearRing.js b/src/ol/geom/LinearRing.js index 65ec5d4ba9..3150afc0e2 100644 --- a/src/ol/geom/LinearRing.js +++ b/src/ol/geom/LinearRing.js @@ -19,7 +19,9 @@ import {douglasPeucker} from '../geom/flat/simplify.js'; * * @constructor * @extends {module:ol/geom/SimpleGeometry} - * @param {Array.} coordinates Coordinates. + * @param {Array.|Array.} coordinates + * Coordinates. (For internal use, flat coordinates in combination with + * `opt_layout` are also accepted.) * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. * @api */ @@ -39,7 +41,11 @@ const LinearRing = function(coordinates, opt_layout) { */ this.maxDeltaRevision_ = -1; - this.setCoordinates(coordinates, opt_layout); + if (opt_layout !== undefined && !Array.isArray(coordinates[0])) { + this.setFlatCoordinatesInternal(opt_layout, coordinates); + } else { + this.setCoordinates(coordinates, opt_layout); + } }; @@ -53,9 +59,7 @@ inherits(LinearRing, SimpleGeometry); * @api */ LinearRing.prototype.clone = function() { - const linearRing = new LinearRing(null); - linearRing.setFlatCoordinates(this.layout, this.flatCoordinates.slice()); - return linearRing; + return new LinearRing(this.flatCoordinates.slice(), this.layout); }; @@ -107,10 +111,7 @@ LinearRing.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) simplifiedFlatCoordinates.length = douglasPeucker( this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, squaredTolerance, simplifiedFlatCoordinates, 0); - const simplifiedLinearRing = new LinearRing(null); - simplifiedLinearRing.setFlatCoordinates( - GeometryLayout.XY, simplifiedFlatCoordinates); - return simplifiedLinearRing; + return new LinearRing(simplifiedFlatCoordinates, GeometryLayout.XY); }; @@ -131,32 +132,18 @@ LinearRing.prototype.intersectsExtent = function(extent) {}; /** * Set the coordinates of the linear ring. - * @param {Array.} coordinates Coordinates. + * @param {!Array.} coordinates Coordinates. * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. * @override * @api */ LinearRing.prototype.setCoordinates = function(coordinates, opt_layout) { - if (!coordinates) { - this.setFlatCoordinates(GeometryLayout.XY, null); - } else { - this.setLayout(opt_layout, coordinates, 1); - if (!this.flatCoordinates) { - this.flatCoordinates = []; - } - this.flatCoordinates.length = deflateCoordinates( - this.flatCoordinates, 0, coordinates, this.stride); - this.changed(); + this.setLayout(opt_layout, coordinates, 1); + if (!this.flatCoordinates) { + this.flatCoordinates = []; } -}; - - -/** - * @param {module:ol/geom/GeometryLayout} layout Layout. - * @param {Array.} flatCoordinates Flat coordinates. - */ -LinearRing.prototype.setFlatCoordinates = function(layout, flatCoordinates) { - this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.flatCoordinates.length = deflateCoordinates( + this.flatCoordinates, 0, coordinates, this.stride); this.changed(); }; export default LinearRing; diff --git a/src/ol/geom/Polygon.js b/src/ol/geom/Polygon.js index 7a779d34d1..effed89fa7 100644 --- a/src/ol/geom/Polygon.js +++ b/src/ol/geom/Polygon.js @@ -249,10 +249,8 @@ Polygon.prototype.getLinearRing = function(index) { if (index < 0 || this.ends_.length <= index) { return null; } - const linearRing = new LinearRing(null); - linearRing.setFlatCoordinates(this.layout, this.flatCoordinates.slice( - index === 0 ? 0 : this.ends_[index - 1], this.ends_[index])); - return linearRing; + return new LinearRing(this.flatCoordinates.slice( + index === 0 ? 0 : this.ends_[index - 1], this.ends_[index]), this.layout); }; @@ -269,8 +267,7 @@ Polygon.prototype.getLinearRings = function() { let offset = 0; for (let i = 0, ii = ends.length; i < ii; ++i) { const end = ends[i]; - const linearRing = new LinearRing(null); - linearRing.setFlatCoordinates(layout, flatCoordinates.slice(offset, end)); + const linearRing = new LinearRing(flatCoordinates.slice(offset, end), layout); linearRings.push(linearRing); offset = end; }