From d0180f35e09efff3c55390467ac4d1359dc363f7 Mon Sep 17 00:00:00 2001 From: Bart van den Eijnden Date: Sat, 27 Dec 2014 19:07:18 +0100 Subject: [PATCH] Support multiple featureTypes as well in autoconfigure mode --- src/ol/format/gml/gmlbaseformat.js | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/ol/format/gml/gmlbaseformat.js b/src/ol/format/gml/gmlbaseformat.js index 94320bfc97..555a28f052 100644 --- a/src/ol/format/gml/gmlbaseformat.js +++ b/src/ol/format/gml/gmlbaseformat.js @@ -106,17 +106,29 @@ ol.format.GMLBase.prototype.readFeaturesInternal = function(node, objectStack) { } else if (localName == 'featureMembers' || localName == 'featureMember') { var context = objectStack[0]; goog.asserts.assert(goog.isObject(context)); - var featureType = context['featureType']; - if (!goog.isDef(featureType) && !goog.isNull(node.firstElementChild)) { - var member = node.firstElementChild; - featureType = member.nodeName.split(':').pop(); + var featureType = goog.object.get(context, 'featureType'); + var i, ii, featureNS; + if (!goog.isDef(featureType) && goog.isDefAndNotNull(node.childNodes)) { + featureType = []; + for (i = 0, ii = node.childNodes.length; i < ii; ++i) { + var child = node.childNodes[i]; + if (child.nodeType === 1) { + var ft = child.nodeName.split(':').pop(); + if (goog.array.indexOf(featureType, ft) === -1) { + featureType.push(ft); + if (!goog.isDef(featureNS)) { + featureNS = child.namespaceURI; + } + } + } + } context['featureType'] = featureType; - context['featureNS'] = member.namespaceURI; + context['featureNS'] = featureNS; } var parsers = {}; var parsersNS = {}; var featureTypes = goog.isArray(featureType) ? featureType : [featureType]; - for (var i = 0, ii = featureTypes.length; i < ii; ++i) { + for (i = 0, ii = featureTypes.length; i < ii; ++i) { parsers[featureTypes[i]] = (localName == 'featureMembers') ? ol.xml.makeArrayPusher(this.readFeatureElement, this) : ol.xml.makeReplacer(this.readFeatureElement, this);