From 3e09ea4a00c9a58ab49069891bb1679885cd88b2 Mon Sep 17 00:00:00 2001 From: Bart van den Eijnden Date: Fri, 28 Feb 2014 10:53:57 +0100 Subject: [PATCH] Finish off writeGeometry --- src/ol/format/gmlformat.js | 18 ++++++++++++------ test/spec/ol/format/gmlformat.test.js | 14 +++++++++++--- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/ol/format/gmlformat.js b/src/ol/format/gmlformat.js index fdc147d1e3..2ce9f3cfe8 100644 --- a/src/ol/format/gmlformat.js +++ b/src/ol/format/gmlformat.js @@ -1205,7 +1205,8 @@ ol.format.GML.writeSurface_ = function(node, geometry, objectStack) { var context = objectStack[objectStack.length - 1]; goog.asserts.assert(goog.isObject(context)); var srsName = goog.object.get(context, 'srsName'); - if (goog.isDefAndNotNull(srsName)) { + var writeSrsName = goog.object.get(context, 'writeSrsName'); + if (goog.isDefAndNotNull(srsName) && writeSrsName !== false) { node.setAttribute('srsName', srsName); } ol.xml.pushSerializeAndPop({node: node, srsName: srsName}, @@ -1225,7 +1226,8 @@ ol.format.GML.writeCurve_ = function(node, geometry, objectStack) { var context = objectStack[objectStack.length - 1]; goog.asserts.assert(goog.isObject(context)); var srsName = goog.object.get(context, 'srsName'); - if (goog.isDefAndNotNull(srsName)) { + var writeSrsName = goog.object.get(context, 'writeSrsName'); + if (goog.isDefAndNotNull(srsName) && writeSrsName !== false) { node.setAttribute('srsName', srsName); } ol.xml.pushSerializeAndPop({node: node, srsName: srsName}, @@ -1246,12 +1248,13 @@ ol.format.GML.writeMultiSurface_ = function(node, geometry, var context = objectStack[objectStack.length - 1]; goog.asserts.assert(goog.isObject(context)); var srsName = goog.object.get(context, 'srsName'); + var surface = goog.object.get(context, 'surface'); if (goog.isDefAndNotNull(srsName)) { node.setAttribute('srsName', srsName); } var polygons = geometry.getPolygons(); for (var i = 0, ii = polygons.length; i < ii; ++i) { - ol.xml.pushSerializeAndPop({node: node, srsName: srsName}, + ol.xml.pushSerializeAndPop({node: node, srsName: srsName, surface: surface}, ol.format.GML.SURFACEORPOLYGONMEMBER_SERIALIZERS_, ol.xml.makeSimpleNodeFactory('surfaceMember'), [polygons[i]], objectStack); @@ -1341,12 +1344,13 @@ ol.format.GML.writeMultiCurve_ = function(node, geometry, objectStack) { var context = objectStack[objectStack.length - 1]; goog.asserts.assert(goog.isObject(context)); var srsName = goog.object.get(context, 'srsName'); + var curve = goog.object.get(context, 'curve'); if (goog.isDefAndNotNull(srsName)) { node.setAttribute('srsName', srsName); } var lines = geometry.getLineStrings(); for (var i = 0, ii = lines.length; i < ii; ++i) { - ol.xml.pushSerializeAndPop({node: node, srsName: srsName}, + ol.xml.pushSerializeAndPop({node: node, srsName: srsName, curve: curve}, ol.format.GML.LINESTRINGORCURVEMEMBER_SERIALIZERS_, ol.xml.makeSimpleNodeFactory('curveMember'), [lines[i]], objectStack); @@ -1382,9 +1386,10 @@ ol.format.GML.writeSurfaceOrPolygonMember_ = function(node, polygon, objectStack) { var context = objectStack[objectStack.length - 1]; goog.asserts.assert(goog.isObject(context)); + var surface = goog.object.get(context, 'surface'); var srsName = goog.object.get(context, 'srsName'); ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */ - ({node: node, srsName: srsName, writeSrsName: false}), + ({node: node, srsName: srsName, writeSrsName: false, surface: surface}), ol.format.GML.GEOMETRY_SERIALIZERS_, ol.format.GML.GEOMETRY_NODE_FACTORY_, [polygon], []); }; @@ -1417,9 +1422,10 @@ ol.format.GML.writeLineStringOrCurveMember_ = function(node, line, objectStack) { var context = objectStack[objectStack.length - 1]; goog.asserts.assert(goog.isObject(context)); + var curve = goog.object.get(context, 'curve'); var srsName = goog.object.get(context, 'srsName'); ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */ - ({node: node, srsName: srsName, writeSrsName: false}), + ({node: node, srsName: srsName, writeSrsName: false, curve: curve}), ol.format.GML.GEOMETRY_SERIALIZERS_, ol.format.GML.GEOMETRY_NODE_FACTORY_, [line], []); }; diff --git a/test/spec/ol/format/gmlformat.test.js b/test/spec/ol/format/gmlformat.test.js index dd094643ef..429fec83e2 100644 --- a/test/spec/ol/format/gmlformat.test.js +++ b/test/spec/ol/format/gmlformat.test.js @@ -468,7 +468,7 @@ describe('ol.format.GML', function() { expect(serialized.firstElementChild).to.xmleql(ol.xml.load(text)); }); - it('can read a singular multicurve-curve geometry', function() { + it('can read and write a singular multicurve-curve geometry', function() { var text = '' + @@ -495,13 +495,16 @@ describe('ol.format.GML', function() { expect(g).to.be.an(ol.geom.MultiLineString); expect(g.getCoordinates()).to.eql( [[[1, 2, 0], [2, 3, 0]], [[3, 4, 0], [4, 5, 0]]]); + format = new ol.format.GML({srsName: 'CRS:84', curve: true}); + var serialized = format.writeGeometry(g); + expect(serialized.firstElementChild).to.xmleql(ol.xml.load(text)); }); }); describe('multisurface', function() { - it('can read a singular multisurface geometry', function() { + it('can read and write a singular multisurface geometry', function() { var text = '' + @@ -541,6 +544,8 @@ describe('ol.format.GML', function() { [1, 2, 0]], [[2, 3, 0], [2, 5, 0], [4, 5, 0], [2, 3, 0]], [[3, 4, 0], [3, 6, 0], [5, 6, 0], [3, 4, 0]]], [[[1, 2, 0], [3, 2, 0], [3, 4, 0], [1, 2, 0]]]]); + var serialized = format.writeGeometry(g); + expect(serialized.firstElementChild).to.xmleql(ol.xml.load(text)); }); it('can read a plural multisurface geometry', function() { @@ -585,7 +590,7 @@ describe('ol.format.GML', function() { [[[1, 2, 0], [3, 2, 0], [3, 4, 0], [1, 2, 0]]]]); }); - it('can read a multisurface-surface geometry', function() { + it('can read and write a multisurface-surface geometry', function() { var text = '' + @@ -633,6 +638,9 @@ describe('ol.format.GML', function() { [1, 2, 0]], [[2, 3, 0], [2, 5, 0], [4, 5, 0], [2, 3, 0]], [[3, 4, 0], [3, 6, 0], [5, 6, 0], [3, 4, 0]]], [[[1, 2, 0], [3, 2, 0], [3, 4, 0], [1, 2, 0]]]]); + format = new ol.format.GML({srsName: 'CRS:84', surface: true}); + var serialized = format.writeGeometry(g); + expect(serialized.firstElementChild).to.xmleql(ol.xml.load(text)); }); });