diff --git a/examples/wkt.js b/examples/wkt.js index fa8edecdde..65af30fdb3 100644 --- a/examples/wkt.js +++ b/examples/wkt.js @@ -1,9 +1,9 @@ goog.require('ol.Feature'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); +goog.require('ol.format.WKT'); goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); -goog.require('ol.parser.WKT'); goog.require('ol.source.OSM'); goog.require('ol.source.Vector'); @@ -11,15 +11,12 @@ var raster = new ol.layer.Tile({ source: new ol.source.OSM() }); -var parser = new ol.parser.WKT(); -var geom = parser.read( +var format = new ol.format.WKT(); +var feature = format.readFeature( 'POLYGON((10.689697265625 -25.0927734375, 34.595947265625 ' + '-20.1708984375, 38.814697265625 -35.6396484375, 13.502197265625 ' + '-39.1552734375, 10.689697265625 -25.0927734375))'); -geom.transform('EPSG:4326', 'EPSG:3857'); - -var feature = new ol.Feature(); -feature.setGeometry(geom); +feature.getGeometry().transform('EPSG:4326', 'EPSG:3857'); var vector = new ol.layer.Vector({ source: new ol.source.Vector({ @@ -29,9 +26,8 @@ var vector = new ol.layer.Vector({ var map = new ol.Map({ layers: [raster, vector], - renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [2952104.019976033, -3277504.823700756], zoom: 4 }) diff --git a/externs/olx.js b/externs/olx.js index cc1d32217f..fc284df86a 100644 --- a/externs/olx.js +++ b/externs/olx.js @@ -1449,6 +1449,20 @@ olx.format.WFSWriteTransactionOptions.prototype.nativeElements; olx.format.WFSWriteTransactionOptions.prototype.gmlOptions; +/** + * @typedef {{splitCollection: (boolean|undefined)}} + * @todo api + */ +olx.format.WKTOptions; + + +/** + * Whether to split GEOMETRYCOLLECTION's into multiple features. + * @type {boolean|undefined} + */ +olx.format.WKTOptions.prototype.splitCollection; + + /** * Interactions for the map. Default is `true` for all options. * @typedef {{altShiftDragRotate: (boolean|undefined), diff --git a/src/ol/parser/parser.js b/old/parser/parser.js similarity index 100% rename from src/ol/parser/parser.js rename to old/parser/parser.js diff --git a/src/ol/parser/wktparser.js b/src/ol/format/wktformat.js similarity index 60% rename from src/ol/parser/wktparser.js rename to src/ol/format/wktformat.js index c1d2897975..e724bc22e4 100644 --- a/src/ol/parser/wktparser.js +++ b/src/ol/format/wktformat.js @@ -1,39 +1,51 @@ -goog.provide('ol.parser.WKT'); +goog.provide('ol.format.WKT'); goog.require('goog.array'); goog.require('goog.string'); goog.require('ol.Feature'); +goog.require('ol.format.TextFeature'); goog.require('ol.geom.Geometry'); goog.require('ol.geom.GeometryCollection'); +goog.require('ol.geom.GeometryType'); goog.require('ol.geom.LineString'); goog.require('ol.geom.MultiLineString'); goog.require('ol.geom.MultiPoint'); goog.require('ol.geom.MultiPolygon'); goog.require('ol.geom.Point'); goog.require('ol.geom.Polygon'); -goog.require('ol.parser.Parser'); -goog.require('ol.parser.StringFeatureParser'); /** * @constructor - * @extends {ol.parser.Parser} - * @implements {ol.parser.StringFeatureParser} + * @extends {ol.format.TextFeature} + * @param {olx.format.WKTOptions=} opt_options Options. * @todo stability experimental * @todo api */ -ol.parser.WKT = function() { +ol.format.WKT = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this); + + /** + * Split GEOMETRYCOLLECTION into multiple features. + * @type {boolean} + * @private + */ + this.splitCollection_ = goog.isDef(options.splitCollection) ? + options.splitCollection : false; + }; -goog.inherits(ol.parser.WKT, ol.parser.Parser); -goog.addSingletonGetter(ol.parser.WKT); +goog.inherits(ol.format.WKT, ol.format.TextFeature); /** * Constants for regExes. * @enum {RegExp} */ -ol.parser.WKT.regExes = { +ol.format.WKT.regExes = { typeStr: /^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/, spaces: /\s+/, parenComma: /\)\s*,\s*\(/, @@ -49,8 +61,8 @@ ol.parser.WKT.regExes = { * @return {ol.geom.Point} Parsed point. * @private */ -ol.parser.WKT.prototype.parsePoint_ = function(str) { - var coords = goog.string.trim(str).split(ol.parser.WKT.regExes.spaces); +ol.format.WKT.prototype.parsePoint_ = function(str) { + var coords = goog.string.trim(str).split(ol.format.WKT.regExes.spaces); return new ol.geom.Point(goog.array.map(coords, parseFloat)); }; @@ -60,7 +72,7 @@ ol.parser.WKT.prototype.parsePoint_ = function(str) { * @return {ol.geom.LineString} Parsed linestring. * @private */ -ol.parser.WKT.prototype.parseLineString_ = function(str) { +ol.format.WKT.prototype.parseLineString_ = function(str) { var points = goog.string.trim(str).split(','); var coordinates = []; for (var i = 0, ii = points.length; i < ii; ++i) { @@ -76,12 +88,12 @@ ol.parser.WKT.prototype.parseLineString_ = function(str) { * @return {ol.geom.MultiPoint} Parsed multipoint. * @private */ -ol.parser.WKT.prototype.parseMultiPoint_ = function(str) { +ol.format.WKT.prototype.parseMultiPoint_ = function(str) { var point; var points = goog.string.trim(str).split(','); var geom = new ol.geom.MultiPoint(null); for (var i = 0, ii = points.length; i < ii; ++i) { - point = points[i].replace(ol.parser.WKT.regExes.trimParens, '$1'); + point = points[i].replace(ol.format.WKT.regExes.trimParens, '$1'); geom.appendPoint(this.parsePoint_.apply(this, [point])); } return geom; @@ -93,12 +105,12 @@ ol.parser.WKT.prototype.parseMultiPoint_ = function(str) { * @return {ol.geom.MultiLineString} Parsed multilinestring. * @private */ -ol.parser.WKT.prototype.parseMultiLineString_ = function(str) { +ol.format.WKT.prototype.parseMultiLineString_ = function(str) { var line; - var lines = goog.string.trim(str).split(ol.parser.WKT.regExes.parenComma); + var lines = goog.string.trim(str).split(ol.format.WKT.regExes.parenComma); var geom = new ol.geom.MultiLineString(null); for (var i = 0, ii = lines.length; i < ii; ++i) { - line = lines[i].replace(ol.parser.WKT.regExes.trimParens, '$1'); + line = lines[i].replace(ol.format.WKT.regExes.trimParens, '$1'); geom.appendLineString(this.parseLineString_.apply(this, [line])); } return geom; @@ -110,12 +122,12 @@ ol.parser.WKT.prototype.parseMultiLineString_ = function(str) { * @return {ol.geom.Polygon} Parsed polygon. * @private */ -ol.parser.WKT.prototype.parsePolygon_ = function(str) { +ol.format.WKT.prototype.parsePolygon_ = function(str) { var ring, linestring, linearring; - var rings = goog.string.trim(str).split(ol.parser.WKT.regExes.parenComma); + var rings = goog.string.trim(str).split(ol.format.WKT.regExes.parenComma); var coordinates = []; for (var i = 0, ii = rings.length; i < ii; ++i) { - ring = rings[i].replace(ol.parser.WKT.regExes.trimParens, '$1'); + ring = rings[i].replace(ol.format.WKT.regExes.trimParens, '$1'); linestring = this.parseLineString_.apply(this, [ring]).getCoordinates(); coordinates.push(linestring); } @@ -128,13 +140,13 @@ ol.parser.WKT.prototype.parsePolygon_ = function(str) { * @return {ol.geom.MultiPolygon} Parsed multipolygon. * @private */ -ol.parser.WKT.prototype.parseMultiPolygon_ = function(str) { +ol.format.WKT.prototype.parseMultiPolygon_ = function(str) { var polygon; var polygons = goog.string.trim(str).split( - ol.parser.WKT.regExes.doubleParenComma); + ol.format.WKT.regExes.doubleParenComma); var geom = new ol.geom.MultiPolygon(null); for (var i = 0, ii = polygons.length; i < ii; ++i) { - polygon = polygons[i].replace(ol.parser.WKT.regExes.trimParens, '$1'); + polygon = polygons[i].replace(ol.format.WKT.regExes.trimParens, '$1'); geom.appendPolygon(this.parsePolygon_.apply(this, [polygon])); } return geom; @@ -146,9 +158,9 @@ ol.parser.WKT.prototype.parseMultiPolygon_ = function(str) { * @return {ol.geom.GeometryCollection} Parsed geometrycollection. * @private */ -ol.parser.WKT.prototype.parseGeometryCollection_ = function(str) { +ol.format.WKT.prototype.parseGeometryCollection_ = function(str) { // separate components of the collection with | - str = str.replace(ol.parser.WKT.regExes.geomCollection, '|$1'); + str = str.replace(ol.format.WKT.regExes.geomCollection, '|$1'); var wktArray = goog.string.trim(str).split('|'); var geoms = []; for (var i = 0, ii = wktArray.length; i < ii; ++i) { @@ -163,7 +175,7 @@ ol.parser.WKT.prototype.parseGeometryCollection_ = function(str) { * @return {string} Coordinates part of Point as WKT. * @private */ -ol.parser.WKT.prototype.encodePoint_ = function(geom) { +ol.format.WKT.prototype.encodePoint_ = function(geom) { var coordinates = geom.getCoordinates(); return coordinates[0] + ' ' + coordinates[1]; }; @@ -174,7 +186,7 @@ ol.parser.WKT.prototype.encodePoint_ = function(geom) { * @return {string} Coordinates part of MultiPoint as WKT. * @private */ -ol.parser.WKT.prototype.encodeMultiPoint_ = function(geom) { +ol.format.WKT.prototype.encodeMultiPoint_ = function(geom) { var array = []; var components = geom.getPoints(); for (var i = 0, ii = components.length; i < ii; ++i) { @@ -189,7 +201,7 @@ ol.parser.WKT.prototype.encodeMultiPoint_ = function(geom) { * @return {string} Coordinates part of GeometryCollection as WKT. * @private */ -ol.parser.WKT.prototype.encodeGeometryCollection_ = function(geom) { +ol.format.WKT.prototype.encodeGeometryCollection_ = function(geom) { var array = []; var geoms = geom.getGeometries(); for (var i = 0, ii = geoms.length; i < ii; ++i) { @@ -204,7 +216,7 @@ ol.parser.WKT.prototype.encodeGeometryCollection_ = function(geom) { * @return {string} Coordinates part of LineString as WKT. * @private */ -ol.parser.WKT.prototype.encodeLineString_ = function(geom) { +ol.format.WKT.prototype.encodeLineString_ = function(geom) { var coordinates = geom.getCoordinates(); var array = []; for (var i = 0, ii = coordinates.length; i < ii; ++i) { @@ -219,7 +231,7 @@ ol.parser.WKT.prototype.encodeLineString_ = function(geom) { * @return {string} Coordinates part of MultiLineString as WKT. * @private */ -ol.parser.WKT.prototype.encodeMultiLineString_ = function(geom) { +ol.format.WKT.prototype.encodeMultiLineString_ = function(geom) { var array = []; var components = geom.getLineStrings(); for (var i = 0, ii = components.length; i < ii; ++i) { @@ -235,7 +247,7 @@ ol.parser.WKT.prototype.encodeMultiLineString_ = function(geom) { * @return {string} Coordinates part of Polygon as WKT. * @private */ -ol.parser.WKT.prototype.encodePolygon_ = function(geom) { +ol.format.WKT.prototype.encodePolygon_ = function(geom) { var array = []; var rings = geom.getLinearRings(); for (var i = 0, ii = rings.length; i < ii; ++i) { @@ -251,7 +263,7 @@ ol.parser.WKT.prototype.encodePolygon_ = function(geom) { * @return {string} Coordinates part of MultiPolygon as WKT. * @private */ -ol.parser.WKT.prototype.encodeMultiPolygon_ = function(geom) { +ol.format.WKT.prototype.encodeMultiPolygon_ = function(geom) { var array = []; var components = geom.getPolygons(); for (var i = 0, ii = components.length; i < ii; ++i) { @@ -268,9 +280,9 @@ ol.parser.WKT.prototype.encodeMultiPolygon_ = function(geom) { * The geometry created. * @private */ -ol.parser.WKT.prototype.parse_ = function(wkt) { - wkt = wkt.replace(ol.parser.WKT.regExes.removeNewLine, ' '); - var matches = ol.parser.WKT.regExes.typeStr.exec(wkt); +ol.format.WKT.prototype.parse_ = function(wkt) { + wkt = wkt.replace(ol.format.WKT.regExes.removeNewLine, ' '); + var matches = ol.format.WKT.regExes.typeStr.exec(wkt); var geometry; if (matches) { var type = matches[1].toLowerCase(); @@ -311,7 +323,7 @@ ol.parser.WKT.prototype.parse_ = function(wkt) { * @return {string} WKT string for the geometry. * @private */ -ol.parser.WKT.prototype.encode_ = function(geom) { +ol.format.WKT.prototype.encode_ = function(geom) { var type = geom.getType(); var result = type.toUpperCase() + '('; if (geom instanceof ol.geom.Point) { @@ -336,63 +348,149 @@ ol.parser.WKT.prototype.encode_ = function(geom) { /** - * Parse a WKT string. - * @param {string} str WKT string. - * @return {ol.geom.Geometry|undefined} Parsed geometry. + * Read a feature from a WKT source. + * + * @param {ArrayBuffer|Document|Node|Object|string} source Source. + * @return {ol.Feature} Feature. * @todo api */ -ol.parser.WKT.prototype.read = function(str) { - return this.parse_(str); -}; +ol.format.WKT.prototype.readFeature; /** - * Parse a WKT document provided as a string. - * @param {string} str WKT document. - * @return {ol.parser.ReadFeaturesResult} Features and metadata. - * @todo api + * @inheritDoc */ -ol.parser.WKT.prototype.readFeaturesFromString = function(str) { - var geom = this.read(str); - var obj = /** @type {ol.parser.ReadFeaturesResult} */ - ({}); +ol.format.WKT.prototype.readFeatureFromText = function(text) { + var geom = this.readGeometryFromText(text); if (goog.isDef(geom)) { var feature = new ol.Feature(); feature.setGeometry(geom); - obj.features = [feature]; + return feature; } - return obj; + return null; }; /** - * Write out a geometry as a WKT string. - * @param {ol.geom.Geometry} geom The geometry to encode. - * @return {string} WKT for the geometry. + * Read all features from a WKT source. + * + * @param {ArrayBuffer|Document|Node|Object|string} source Source. + * @return {Array.} Features. * @todo api */ -ol.parser.WKT.prototype.write = function(geom) { - return this.encode_(geom); +ol.format.WKT.prototype.readFeatures; + + +/** + * @inheritDoc + */ +ol.format.WKT.prototype.readFeaturesFromText = function(text) { + var geometries = []; + var geometry = this.readGeometryFromText(text); + if (this.splitCollection_ && + geometry.getType() == ol.geom.GeometryType.GEOMETRY_COLLECTION) { + geometries = (/** @type {ol.geom.GeometryCollection} */ (geometry)) + .getGeometriesArray(); + } else { + geometries = [geometry]; + } + var feature, features = []; + for (var i = 0, ii = geometries.length; i < ii; ++i) { + feature = new ol.Feature(); + feature.setGeometry(geometries[i]); + features.push(feature); + } + return features; }; /** - * Parse a WKT string. - * @param {string} str WKT string. - * @return {ol.geom.Geometry|undefined} Parsed geometry. + * Read a single geometry from a WKT source. + * + * @param {ArrayBuffer|Document|Node|Object|string} source Source. + * @return {ol.geom.Geometry} Geometry. * @todo api */ -ol.parser.WKT.read = function(str) { - return ol.parser.WKT.getInstance().read(str); +ol.format.WKT.prototype.readGeometry; + + +/** + * @inheritDoc + */ +ol.format.WKT.prototype.readGeometryFromText = function(text) { + return this.parse_(text) || null; }; /** - * Write out a geometry as a WKT string. - * @param {ol.geom.Geometry} geom The geometry to encode. - * @return {string} WKT for the geometry. + * @inheritDoc + */ +ol.format.WKT.prototype.readProjectionFromText = function(text) { + return null; +}; + + +/** + * Encode a feature as a WKT string. + * + * @param {ol.Feature} feature Feature. + * @return {ArrayBuffer|Node|Object|string} Result. * @todo api */ -ol.parser.WKT.write = function(geom) { - return ol.parser.WKT.getInstance().write(geom); +ol.format.WKT.prototype.writeFeature; + + +/** + * @inheritDoc + */ +ol.format.WKT.prototype.writeFeatureText = function(feature) { + var geometry = feature.getGeometry(); + if (goog.isDef(geometry)) { + return this.writeGeometryText(geometry); + } + return ''; +}; + + +/** + * Encode an array of features as a WKT string. + * + * @param {Array.} features Features. + * @return {ArrayBuffer|Node|Object|string} Result. + * @todo api + */ +ol.format.WKT.prototype.writeFeatures; + + +/** + * @inheritDoc + */ +ol.format.WKT.prototype.writeFeaturesText = function(features) { + if (features.length == 1) { + return this.writeFeatureText(features[0]); + } + var geometries = []; + for (var i = 0, ii = features.length; i < ii; ++i) { + geometries.push(features[i].getGeometry()); + } + var collection = new ol.geom.GeometryCollection(geometries); + return this.writeGeometryText(collection); +}; + + +/** + * Write a single geometry as a WKT string. + * + * @param {ol.geom.Geometry} geometry Geometry. + * @return {ArrayBuffer|Node|Object|string} Node. + * @todo api + */ +ol.format.WKT.prototype.writeGeometry; + + +/** + * @inheritDoc + */ +ol.format.WKT.prototype.writeGeometryText = function(geometry) { + return this.encode_(geometry); }; diff --git a/src/ol/parser/featureparser.js b/src/ol/parser/featureparser.js deleted file mode 100644 index cd614b4f91..0000000000 --- a/src/ol/parser/featureparser.js +++ /dev/null @@ -1,98 +0,0 @@ -goog.provide('ol.parser.AsyncObjectFeatureParser'); -goog.provide('ol.parser.AsyncStringFeatureParser'); -goog.provide('ol.parser.DomFeatureParser'); -goog.provide('ol.parser.ObjectFeatureParser'); -goog.provide('ol.parser.ReadFeaturesResult'); -goog.provide('ol.parser.StringFeatureParser'); - -goog.require('ol.Feature'); - - - -/** - * @interface - */ -ol.parser.DomFeatureParser = function() {}; - - -/** - * @param {Element|Document} node Document or element node. - * @return {ol.parser.ReadFeaturesResult} Features and metadata. - */ -ol.parser.DomFeatureParser.prototype.readFeaturesFromNode = - goog.abstractMethod; - - - -/** - * @interface - */ -ol.parser.ObjectFeatureParser = function() {}; - - -/** - * @param {Object} obj Object representing features. - * @return {ol.parser.ReadFeaturesResult} Features and metadata. - */ -ol.parser.ObjectFeatureParser.prototype.readFeaturesFromObject = - goog.abstractMethod; - - - -/** - * @interface - */ -ol.parser.StringFeatureParser = function() {}; - - -/** - * @param {string} data String data. - * @return {ol.parser.ReadFeaturesResult} Features and metadata. - */ -ol.parser.StringFeatureParser.prototype.readFeaturesFromString = - goog.abstractMethod; - - - -/** - * @interface - */ -ol.parser.AsyncStringFeatureParser = function() {}; - - -/** - * @param {string} data String data. - * @param {function(ol.parser.ReadFeaturesResult)} callback Callback which is - * called after parsing. - */ -ol.parser.AsyncStringFeatureParser.prototype.readFeaturesFromStringAsync = - goog.abstractMethod; - - - -/** - * @interface - */ -ol.parser.AsyncObjectFeatureParser = function() {}; - - -/** - * @param {Object} obj Object representing features. - * @param {function(ol.parser.ReadFeaturesResult)} callback Callback which is - * called after parsing. - */ -ol.parser.AsyncObjectFeatureParser.prototype.readFeaturesFromObjectAsync = - goog.abstractMethod; - - -/** - * @typedef {{projection: ol.proj.ProjectionLike}} - */ -ol.parser.ReadFeaturesMetadata; - - -/** - * @typedef {{features: Array., - * metadata: ol.parser.ReadFeaturesMetadata}} - */ -ol.parser.ReadFeaturesResult; diff --git a/test/spec/ol/parser/wkt.test.js b/test/spec/ol/format/wktformat.test.js similarity index 79% rename from test/spec/ol/parser/wkt.test.js rename to test/spec/ol/format/wktformat.test.js index 904b619e62..559138e7e4 100644 --- a/test/spec/ol/parser/wkt.test.js +++ b/test/spec/ol/format/wktformat.test.js @@ -1,34 +1,34 @@ -goog.provide('ol.test.parser.WKT'); +goog.provide('ol.test.format.WKT'); -describe('ol.parser.WKT', function() { +describe('ol.format.WKT', function() { - var parser = new ol.parser.WKT(); + var format = new ol.format.WKT(); it('Point read / written correctly', function() { var wkt = 'POINT(30 10)'; - var geom = parser.read(wkt); + var geom = format.readGeometry(wkt); expect(geom.getCoordinates()).to.eql([30, 10]); - expect(parser.write(geom)).to.eql(wkt); + expect(format.writeGeometry(geom)).to.eql(wkt); // test whitespace when reading wkt = 'POINT (30 10)'; - geom = parser.read(wkt); + geom = format.readGeometry(wkt); expect(geom.getCoordinates()).to.eql([30, 10]); }); it('MultiPoint read / written correctly', function() { // there are two forms to test var wkt = 'MULTIPOINT((10 40),(40 30),(20 20),(30 10))'; - var geom = parser.read(wkt); + var geom = format.readGeometry(wkt); var points = geom.getPoints(); expect(points.length).to.eql(4); expect(points[0].getCoordinates()).to.eql([10, 40]); expect(points[1].getCoordinates()).to.eql([40, 30]); expect(points[2].getCoordinates()).to.eql([20, 20]); expect(points[3].getCoordinates()).to.eql([30, 10]); - expect(parser.write(geom)).to.eql(wkt); + expect(format.writeGeometry(geom)).to.eql(wkt); // this has whitespace wkt = 'MULTIPOINT (10 40, 40 30, 20 20, 30 10)'; - geom = parser.read(wkt); + geom = format.readGeometry(wkt); points = geom.getPoints(); expect(points.length).to.eql(4); expect(points[0].getCoordinates()).to.eql([10, 40]); @@ -39,13 +39,13 @@ describe('ol.parser.WKT', function() { it('LineString read / written correctly', function() { var wkt = 'LINESTRING(30 10,10 30,40 40)'; - var geom = parser.read(wkt); + var geom = format.readGeometry(wkt); expect(geom.getType()).to.eql(ol.geom.GeometryType.LINE_STRING); expect(geom.getCoordinates()).to.eql([[30, 10], [10, 30], [40, 40]]); - expect(parser.write(geom)).to.eql(wkt); + expect(format.writeGeometry(geom)).to.eql(wkt); // test whitespace when reading wkt = 'LINESTRING (30 10, 10 30, 40 40)'; - geom = parser.read(wkt); + geom = format.readGeometry(wkt); expect(geom.getType()).to.eql(ol.geom.GeometryType.LINE_STRING); expect(geom.getCoordinates()).to.eql([[30, 10], [10, 30], [40, 40]]); }); @@ -53,18 +53,18 @@ describe('ol.parser.WKT', function() { it('MultiLineString read / written correctly', function() { var wkt = 'MULTILINESTRING((10 10,20 20,10 40),' + '(40 40,30 30,40 20,30 10))'; - var geom = parser.read(wkt); + var geom = format.readGeometry(wkt); expect(geom.getType()).to.eql(ol.geom.GeometryType.MULTI_LINE_STRING); var linestrings = geom.getLineStrings(); expect(linestrings.length).to.eql(2); expect(linestrings[0].getType()).to.eql(ol.geom.GeometryType.LINE_STRING); expect(linestrings[0].getCoordinates()).to.eql( [[10, 10], [20, 20], [10, 40]]); - expect(parser.write(geom)).to.eql(wkt); + expect(format.writeGeometry(geom)).to.eql(wkt); // test whitespace when reading wkt = 'MULTILINESTRING ( (10 10, 20 20, 10 40), ' + '(40 40, 30 30, 40 20, 30 10) )'; - geom = parser.read(wkt); + geom = format.readGeometry(wkt); expect(geom.getType()).to.eql(ol.geom.GeometryType.MULTI_LINE_STRING); linestrings = geom.getLineStrings(); expect(linestrings.length).to.eql(2); @@ -76,18 +76,18 @@ describe('ol.parser.WKT', function() { it('Polygon read / written correctly', function() { var wkt = 'POLYGON((30 10,10 20,20 40,40 40,30 10))'; - var geom = parser.read(wkt); + var geom = format.readGeometry(wkt); expect(geom.getType()).to.eql(ol.geom.GeometryType.POLYGON); var rings = geom.getLinearRings(); expect(rings.length).to.eql(1); expect(rings[0].getType()).to.eql(ol.geom.GeometryType.LINEAR_RING); expect(rings[0].getCoordinates()).to.eql( [[30, 10], [10, 20], [20, 40], [40, 40], [30, 10]]); - expect(parser.write(geom)).to.eql(wkt); + expect(format.writeGeometry(geom)).to.eql(wkt); // note that WKT doesn't care about winding order, we do wkt = 'POLYGON((35 10,10 20,15 40,45 45,35 10),(20 30,30 20,35 35,20 30))'; - geom = parser.read(wkt); + geom = format.readGeometry(wkt); expect(geom.getType()).to.eql(ol.geom.GeometryType.POLYGON); rings = geom.getLinearRings(); expect(rings.length).to.eql(2); @@ -97,11 +97,11 @@ describe('ol.parser.WKT', function() { [[35, 10], [10, 20], [15, 40], [45, 45], [35, 10]]); expect(rings[1].getCoordinates()).to.eql( [[20, 30], [30, 20], [35, 35], [20, 30]]); - expect(parser.write(geom)).to.eql(wkt); + expect(format.writeGeometry(geom)).to.eql(wkt); // test whitespace when reading wkt = 'POLYGON ( (30 10, 10 20, 20 40, 40 40, 30 10) )'; - geom = parser.read(wkt); + geom = format.readGeometry(wkt); expect(geom.getType()).to.eql(ol.geom.GeometryType.POLYGON); rings = geom.getLinearRings(); expect(rings.length).to.eql(1); @@ -114,7 +114,7 @@ describe('ol.parser.WKT', function() { // note that WKT doesn't care about winding order, we do var wkt = 'MULTIPOLYGON(((40 40,45 30,20 45,40 40)),' + '((20 35,45 20,30 5,10 10,10 30,20 35),(30 20,20 25,20 15,30 20)))'; - var geom = parser.read(wkt); + var geom = format.readGeometry(wkt); expect(geom.getType()).to.eql(ol.geom.GeometryType.MULTI_POLYGON); var polygons = geom.getPolygons(); expect(polygons.length).to.eql(2); @@ -128,13 +128,13 @@ describe('ol.parser.WKT', function() { [[20, 35], [45, 20], [30, 5], [10, 10], [10, 30], [20, 35]]); expect(polygons[1].getLinearRings()[1].getCoordinates()).to.eql( [[30, 20], [20, 25], [20, 15], [30, 20]]); - expect(parser.write(geom)).to.eql(wkt); + expect(format.writeGeometry(geom)).to.eql(wkt); // test whitespace when reading wkt = 'MULTIPOLYGON( ( ( 40 40,45 30, 20 45 ,40 40 )) ,' + '( (20 35, 45 20,30 5,10 10,10 30,20 35), ' + '( 30 20, 20 25,20 15 ,30 20 ) ))'; - geom = parser.read(wkt); + geom = format.readGeometry(wkt); expect(geom.getType()).to.eql(ol.geom.GeometryType.MULTI_POLYGON); polygons = geom.getPolygons(); expect(polygons.length).to.eql(2); @@ -152,7 +152,7 @@ describe('ol.parser.WKT', function() { it('GeometryCollection read / written correctly', function() { var wkt = 'GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))'; - var geom = parser.read(wkt); + var geom = format.readGeometry(wkt); var geoms = geom.getGeometries(); expect(geoms.length).to.eql(2); expect(geom.getType()).to.eql(ol.geom.GeometryType.GEOMETRY_COLLECTION); @@ -160,10 +160,10 @@ describe('ol.parser.WKT', function() { expect(geoms[1].getType()).to.eql(ol.geom.GeometryType.LINE_STRING); expect(geoms[0].getCoordinates()).to.eql([4, 6]); expect(geoms[1].getCoordinates()).to.eql([[4, 6], [7, 10]]); - expect(parser.write(geom)).to.eql(wkt); + expect(format.writeGeometry(geom)).to.eql(wkt); // test whitespace when reading wkt = 'GEOMETRYCOLLECTION ( POINT (4 6), LINESTRING (4 6, 7 10) )'; - geom = parser.read(wkt); + geom = format.readGeometry(wkt); geoms = geom.getGeometries(); expect(geoms.length).to.eql(2); expect(geom.getType()).to.eql(ol.geom.GeometryType.GEOMETRY_COLLECTION); @@ -173,7 +173,20 @@ describe('ol.parser.WKT', function() { expect(geoms[1].getCoordinates()).to.eql([[4, 6], [7, 10]]); }); + it('GeometryCollection split / merged correctly', function() { + format = new ol.format.WKT({splitCollection: true}); + var wkt = 'GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))'; + var features = format.readFeatures(wkt); + expect(features.length).to.eql(2); + var geoms = [features[0].getGeometry(), features[1].getGeometry()]; + expect(geoms[0].getType()).to.eql(ol.geom.GeometryType.POINT); + expect(geoms[1].getType()).to.eql(ol.geom.GeometryType.LINE_STRING); + expect(geoms[0].getCoordinates()).to.eql([4, 6]); + expect(geoms[1].getCoordinates()).to.eql([[4, 6], [7, 10]]); + expect(format.writeFeatures(features)).to.eql(wkt); + }); + }); goog.require('ol.geom.GeometryType'); -goog.require('ol.parser.WKT'); +goog.require('ol.format.WKT');