diff --git a/src/ol/format/gml3.js b/src/ol/format/gml3.js index d2041ed356..4ada7507c0 100644 --- a/src/ol/format/gml3.js +++ b/src/ol/format/gml3.js @@ -345,7 +345,7 @@ ol.format.GML3.prototype.readFlatPosList_ = function(node, objectStack) { var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, ''); var context = objectStack[0]; var containerSrs = context['srsName']; - var containerDimension = node.parentNode.getAttribute('srsDimension'); + var contextDimension = context['srsDimension']; var axisOrientation = 'enu'; if (containerSrs) { var proj = ol.proj.get(containerSrs); @@ -360,8 +360,11 @@ ol.format.GML3.prototype.readFlatPosList_ = function(node, objectStack) { } else if (node.getAttribute('dimension')) { dim = ol.format.XSD.readNonNegativeIntegerString( node.getAttribute('dimension')); - } else if (containerDimension) { - dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension); + } else if (node.parentNode.getAttribute('srsDimension')) { + dim = ol.format.XSD.readNonNegativeIntegerString( + node.parentNode.getAttribute('srsDimension')); + } else if (contextDimension) { + dim = ol.format.XSD.readNonNegativeIntegerString(contextDimension); } var x, y, z; var flatCoordinates = []; diff --git a/src/ol/format/gmlbase.js b/src/ol/format/gmlbase.js index 1371ffa453..2d68b65aa7 100644 --- a/src/ol/format/gmlbase.js +++ b/src/ol/format/gmlbase.js @@ -198,6 +198,7 @@ ol.format.GMLBase.prototype.readFeaturesInternal = function(node, objectStack) { ol.format.GMLBase.prototype.readGeometryElement = function(node, objectStack) { var context = /** @type {Object} */ (objectStack[0]); context['srsName'] = node.firstElementChild.getAttribute('srsName'); + context['srsDimension'] = node.firstElementChild.getAttribute('srsDimension'); /** @type {ol.geom.Geometry} */ var geometry = ol.xml.pushParseAndPop(null, this.GEOMETRY_PARSERS_, node, objectStack, this); diff --git a/test/spec/ol/format/gml.test.js b/test/spec/ol/format/gml.test.js index 2764eab7ab..d9225ede22 100644 --- a/test/spec/ol/format/gml.test.js +++ b/test/spec/ol/format/gml.test.js @@ -1466,4 +1466,35 @@ describe('ol.format.GML3', function() { }); + describe('when parsing srsDimension from WFS (Geoserver)', function() { + + var features, feature; + before(function(done) { + afterLoadText('spec/ol/format/gml/geoserverFeatures.xml', function(xml) { + try { + var config = { + 'featureNS': 'http://www.openplans.org/topp', + 'featureType': 'states' + }; + features = new ol.format.GML(config).readFeatures(xml); + } catch (e) { + done(e); + } + done(); + }); + }); + + it('creates 3 features', function() { + expect(features).to.have.length(3); + }); + + it('creates a polygon for Illinois', function() { + feature = features[0]; + expect(feature.getId()).to.equal('states.1'); + expect(feature.get('STATE_NAME')).to.equal('Illinois'); + expect(feature.getGeometry()).to.be.an(ol.geom.MultiPolygon); + }); + + }); + }); diff --git a/test/spec/ol/format/gml/geoserverFeatures.xml b/test/spec/ol/format/gml/geoserverFeatures.xml new file mode 100644 index 0000000000..c390eb8e49 --- /dev/null +++ b/test/spec/ol/format/gml/geoserverFeatures.xml @@ -0,0 +1,72 @@ + + + + + + 51.91122415 4.46386854 46.04679351 51.91120839 4.46382399 46.04679382 51.91122877 4.46383897 46.04679306 51.91123013 4.46385411 46.04679315 51.91123016 4.46386244 46.04679328 + + + + + + + + + 51.91119276 4.46385491 46.06074531 51.91118582 4.4638264 46.06074609 51.91121772 4.46380612 46.06074168 51.91122465 4.46383463 46.06074089 51.91119276 4.46385491 46.06074531 + + + + + + + + + + + 51.91123321 4.46384921 46.04679306 51.91123242 4.46381475 46.0467932 51.91122926 4.46381494 46.04679323 51.91123004 4.4638494 46.04679309 51.91123321 4.46384921 46.04679306 + + + + + + + + + + + 51.91123372 4.46388232 46.04679377 51.91122788 4.46388684 46.04679399 51.91123214 4.46390122 46.04679455 51.91123798 4.4638967 46.04679433 51.91123372 4.46388232 46.04679377 + + + + + + + + + 51.91117684 4.46386436 46.06565659 51.91115683 4.46386502 46.0656567 + + + + + + + 51.91117878 4.46385015 46.06636351 51.91115877 4.46385081 46.06636361 + + + + + + + 51.91121687 4.46390244 46.08019498 51.91119686 4.4639031 46.08019509 + + + + + + + 51.91125849 4.46383715 46.04679348 + + + + +