diff --git a/src/ol/format/gml/base.js b/src/ol/format/gml/base.js
index 5d48a08975..e561921c50 100644
--- a/src/ol/format/gml/base.js
+++ b/src/ol/format/gml/base.js
@@ -10,10 +10,8 @@ goog.require('goog.object');
goog.require('goog.string');
goog.require('ol.Feature');
goog.require('ol.array');
-goog.require('ol.extent');
goog.require('ol.format.Feature');
goog.require('ol.format.XMLFeature');
-goog.require('ol.format.XSD');
goog.require('ol.geom.Geometry');
goog.require('ol.geom.LineString');
goog.require('ol.geom.LinearRing');
@@ -100,16 +98,6 @@ ol.format.GML = function(opt_options) {
goog.inherits(ol.format.GML, ol.format.XMLFeature);
-/**
- * @const
- * @type {string}
- * @private
- */
-ol.format.GML.schemaLocation_ = 'http://www.opengis.net/gml ' +
- 'http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/' +
- '1.0.0/gmlsf.xsd';
-
-
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
@@ -286,51 +274,6 @@ ol.format.GML.prototype.readMultiLineString_ = function(node, objectStack) {
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.MultiLineString|undefined} MultiLineString.
- */
-ol.format.GML.prototype.readMultiCurve_ = function(node, objectStack) {
- goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
- goog.asserts.assert(node.localName == 'MultiCurve');
- var lineStrings = ol.xml.pushParseAndPop(
- /** @type {Array.
} */ ([]),
- ol.format.GML.MULTICURVE_PARSERS_, node, objectStack, this);
- if (goog.isDef(lineStrings)) {
- var multiLineString = new ol.geom.MultiLineString(null);
- multiLineString.setLineStrings(lineStrings);
- return multiLineString;
- } else {
- return undefined;
- }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.MultiPolygon|undefined} MultiPolygon.
- */
-ol.format.GML.prototype.readMultiSurface_ = function(node, objectStack) {
- goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
- goog.asserts.assert(node.localName == 'MultiSurface');
- var polygons = ol.xml.pushParseAndPop(
- /** @type {Array.} */ ([]),
- ol.format.GML.MULTISURFACE_PARSERS_, node, objectStack, this);
- if (goog.isDef(polygons)) {
- var multiPolygon = new ol.geom.MultiPolygon(null);
- multiPolygon.setPolygons(polygons);
- return multiPolygon;
- } else {
- return undefined;
- }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
* @return {ol.geom.MultiPolygon|undefined} MultiPolygon.
*/
ol.format.GML.prototype.readMultiPolygon_ = function(node, objectStack) {
@@ -376,32 +319,6 @@ ol.format.GML.prototype.lineStringMemberParser_ = function(node, objectStack) {
};
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GML.prototype.curveMemberParser_ = function(node, objectStack) {
- goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
- goog.asserts.assert(node.localName == 'curveMember' ||
- node.localName == 'curveMembers');
- ol.xml.parse(ol.format.GML.CURVEMEMBER_PARSERS_, node, objectStack, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GML.prototype.surfaceMemberParser_ = function(node, objectStack) {
- goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
- goog.asserts.assert(node.localName == 'surfaceMember' ||
- node.localName == 'surfaceMembers');
- ol.xml.parse(ol.format.GML.SURFACEMEMBER_PARSERS_, node, objectStack, this);
-};
-
-
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
@@ -436,109 +353,6 @@ ol.format.GML.prototype.readLineString_ = function(node, objectStack) {
};
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<(Array.)>|undefined} flat coordinates.
- */
-ol.format.GML.prototype.readPatch_ = function(node, objectStack) {
- goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
- goog.asserts.assert(node.localName == 'patches');
- return ol.xml.pushParseAndPop(
- /** @type {Array.>} */ ([null]),
- ol.format.GML.PATCHES_PARSERS_, node, objectStack, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.|undefined} flat coordinates.
- */
-ol.format.GML.prototype.readSegment_ = function(node, objectStack) {
- goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
- goog.asserts.assert(node.localName == 'segments');
- return ol.xml.pushParseAndPop(
- /** @type {Array.} */ ([null]),
- ol.format.GML.SEGMENTS_PARSERS_, node, objectStack, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<(Array.)>|undefined} flat coordinates.
- */
-ol.format.GML.prototype.readPolygonPatch_ = function(node, objectStack) {
- goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
- goog.asserts.assert(node.localName == 'PolygonPatch');
- return ol.xml.pushParseAndPop(
- /** @type {Array.>} */ ([null]),
- ol.format.GML.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.|undefined} flat coordinates.
- */
-ol.format.GML.prototype.readLineStringSegment_ = function(node, objectStack) {
- goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
- goog.asserts.assert(node.localName == 'LineStringSegment');
- return ol.xml.pushParseAndPop(
- /** @type {Array.} */ ([null]),
- ol.format.GML.GEOMETRY_FLAT_COORDINATES_PARSERS_,
- node, objectStack, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GML.prototype.interiorParser_ = function(node, objectStack) {
- goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
- goog.asserts.assert(node.localName == 'interior');
- var flatLinearRing = ol.xml.pushParseAndPop(
- /** @type {Array.|undefined} */ (undefined),
- ol.format.GML.RING_PARSERS, node, objectStack, this);
- if (goog.isDef(flatLinearRing)) {
- var flatLinearRings = /** @type {Array.>} */
- (objectStack[objectStack.length - 1]);
- goog.asserts.assert(goog.isArray(flatLinearRings));
- goog.asserts.assert(flatLinearRings.length > 0);
- flatLinearRings.push(flatLinearRing);
- }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GML.prototype.exteriorParser_ = function(node, objectStack) {
- goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
- goog.asserts.assert(node.localName == 'exterior');
- var flatLinearRing = ol.xml.pushParseAndPop(
- /** @type {Array.|undefined} */ (undefined),
- ol.format.GML.RING_PARSERS, node, objectStack, this);
- if (goog.isDef(flatLinearRing)) {
- var flatLinearRings = /** @type {Array.>} */
- (objectStack[objectStack.length - 1]);
- goog.asserts.assert(goog.isArray(flatLinearRings));
- goog.asserts.assert(flatLinearRings.length > 0);
- flatLinearRings[0] = flatLinearRing;
- }
-};
-
-
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
@@ -611,77 +425,6 @@ ol.format.GML.prototype.readPolygon_ = function(node, objectStack) {
};
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.Polygon|undefined} Polygon.
- */
-ol.format.GML.prototype.readSurface_ = function(node, objectStack) {
- goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
- goog.asserts.assert(node.localName == 'Surface');
- var flatLinearRings = ol.xml.pushParseAndPop(
- /** @type {Array.>} */ ([null]),
- ol.format.GML.SURFACE_PARSERS_, node, objectStack, this);
- if (goog.isDef(flatLinearRings) &&
- !goog.isNull(flatLinearRings[0])) {
- var polygon = new ol.geom.Polygon(null);
- var flatCoordinates = flatLinearRings[0];
- var ends = [flatCoordinates.length];
- var i, ii;
- for (i = 1, ii = flatLinearRings.length; i < ii; ++i) {
- ol.array.safeExtend(flatCoordinates, flatLinearRings[i]);
- ends.push(flatCoordinates.length);
- }
- polygon.setFlatCoordinates(
- ol.geom.GeometryLayout.XYZ, flatCoordinates, ends);
- return polygon;
- } else {
- return undefined;
- }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.LineString|undefined} LineString.
- */
-ol.format.GML.prototype.readCurve_ = function(node, objectStack) {
- goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
- goog.asserts.assert(node.localName == 'Curve');
- var flatCoordinates = ol.xml.pushParseAndPop(
- /** @type {Array.} */ ([null]),
- ol.format.GML.CURVE_PARSERS_, node, objectStack, this);
- if (goog.isDef(flatCoordinates)) {
- var lineString = new ol.geom.LineString(null);
- lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
- return lineString;
- } else {
- return undefined;
- }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.Extent|undefined} Envelope.
- */
-ol.format.GML.prototype.readEnvelope_ = function(node, objectStack) {
- goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
- goog.asserts.assert(node.localName == 'Envelope');
- var flatCoordinates = ol.xml.pushParseAndPop(
- /** @type {Array.} */ ([null]),
- ol.format.GML.ENVELOPE_PARSERS_, node, objectStack, this);
- return ol.extent.createOrUpdate(flatCoordinates[1][0],
- flatCoordinates[1][1], flatCoordinates[2][0],
- flatCoordinates[2][1]);
-};
-
-
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
@@ -699,94 +442,30 @@ ol.format.GML.prototype.readFlatCoordinatesFromNode_ = function(node,
/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
+ * @const
+ * @type {Object.>}
* @private
- * @return {Array.|undefined} Flat coordinates.
*/
-ol.format.GML.prototype.readFlatPos_ = function(node, objectStack) {
- var s = ol.xml.getAllTextContent(node, false);
- var re = /^\s*([+\-]?\d*\.?\d+(?:[eE][+\-]?\d+)?)\s*/;
- /** @type {Array.} */
- var flatCoordinates = [];
- var m;
- while ((m = re.exec(s))) {
- flatCoordinates.push(parseFloat(m[1]));
- s = s.substr(m[0].length);
+ol.format.GML.POLYGONMEMBER_PARSERS_ = {
+ 'http://www.opengis.net/gml' : {
+ 'Polygon': ol.xml.makeArrayPusher(
+ ol.format.GML.prototype.readPolygon)
}
- if (s !== '') {
- return undefined;
- }
- var context = objectStack[0];
- goog.asserts.assert(goog.isObject(context));
- var containerSrs = goog.object.get(context, 'srsName');
- var axisOrientation = 'enu';
- if (!goog.isNull(containerSrs)) {
- var proj = ol.proj.get(containerSrs);
- axisOrientation = proj.getAxisOrientation();
- }
- if (axisOrientation === 'neu') {
- var i, ii;
- for (i = 0, ii = flatCoordinates.length; i < ii; i += 3) {
- var y = flatCoordinates[i];
- var x = flatCoordinates[i + 1];
- flatCoordinates[i] = x;
- flatCoordinates[i + 1] = y;
- }
- }
- var len = flatCoordinates.length;
- if (len == 2) {
- flatCoordinates.push(0);
- }
- if (len === 0) {
- return undefined;
- }
- return flatCoordinates;
};
/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
+ * @const
+ * @type {Object.>}
* @private
- * @return {Array.|undefined} Flat coordinates.
*/
-ol.format.GML.prototype.readFlatPosList_ = function(node, objectStack) {
- var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, '');
- var context = objectStack[0];
- goog.asserts.assert(goog.isObject(context));
- var containerSrs = goog.object.get(context, 'srsName');
- var containerDimension = node.parentNode.getAttribute('srsDimension');
- var axisOrientation = 'enu';
- if (!goog.isNull(containerSrs)) {
- var proj = ol.proj.get(containerSrs);
- axisOrientation = proj.getAxisOrientation();
+ol.format.GML.MULTILINESTRING_PARSERS_ = {
+ 'http://www.opengis.net/gml' : {
+ 'lineStringMember': ol.xml.makeArrayPusher(
+ ol.format.GML.prototype.lineStringMemberParser_),
+ 'lineStringMembers': ol.xml.makeArrayPusher(
+ ol.format.GML.prototype.lineStringMemberParser_)
}
- var coords = s.split(/\s+/);
- // The "dimension" attribute is from the GML 3.0.1 spec.
- var dim = 2;
- if (!goog.isNull(node.getAttribute('srsDimension'))) {
- dim = ol.format.XSD.readNonNegativeIntegerString(
- node.getAttribute('srsDimension'));
- } else if (!goog.isNull(node.getAttribute('dimension'))) {
- dim = ol.format.XSD.readNonNegativeIntegerString(
- node.getAttribute('dimension'));
- } else if (!goog.isNull(containerDimension)) {
- dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension);
- }
- var x, y, z;
- var flatCoordinates = [];
- for (var i = 0, ii = coords.length; i < ii; i += dim) {
- x = parseFloat(coords[i]);
- y = parseFloat(coords[i + 1]);
- z = (dim === 3) ? parseFloat(coords[i + 2]) : 0;
- if (axisOrientation.substr(0, 2) === 'en') {
- flatCoordinates.push(x, y, z);
- } else {
- flatCoordinates.push(y, x, z);
- }
- }
- return flatCoordinates;
};
@@ -818,107 +497,6 @@ ol.format.GML.GEOMETRY_PARSERS_ = {
};
-/**
- * @const
- * @type {Object.>}
- * @private
- */
-ol.format.GML.GEOMETRY_FLAT_COORDINATES_PARSERS_ = {
- 'http://www.opengis.net/gml' : {
- 'pos': ol.xml.makeReplacer(ol.format.GML.prototype.readFlatPos_),
- 'posList': ol.xml.makeReplacer(ol.format.GML.prototype.readFlatPosList_)
- }
-};
-
-
-/**
- * @const
- * @type {Object.>}
- * @private
- */
-ol.format.GML.FLAT_LINEAR_RINGS_PARSERS_ = {
- 'http://www.opengis.net/gml' : {
- 'interior': ol.format.GML.prototype.interiorParser_,
- 'exterior': ol.format.GML.prototype.exteriorParser_
- }
-};
-
-
-/**
- * @const
- * @type {Object.>}
- * @private
- */
-ol.format.GML.MULTIPOINT_PARSERS_ = {
- 'http://www.opengis.net/gml' : {
- 'pointMember': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.pointMemberParser_),
- 'pointMembers': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.pointMemberParser_)
- }
-};
-
-
-/**
- * @const
- * @type {Object.>}
- * @private
- */
-ol.format.GML.MULTILINESTRING_PARSERS_ = {
- 'http://www.opengis.net/gml' : {
- 'lineStringMember': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.lineStringMemberParser_),
- 'lineStringMembers': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.lineStringMemberParser_)
- }
-};
-
-
-/**
- * @const
- * @type {Object.>}
- * @private
- */
-ol.format.GML.MULTICURVE_PARSERS_ = {
- 'http://www.opengis.net/gml' : {
- 'curveMember': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.curveMemberParser_),
- 'curveMembers': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.curveMemberParser_)
- }
-};
-
-
-/**
- * @const
- * @type {Object.>}
- * @private
- */
-ol.format.GML.MULTISURFACE_PARSERS_ = {
- 'http://www.opengis.net/gml' : {
- 'surfaceMember': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.surfaceMemberParser_),
- 'surfaceMembers': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.surfaceMemberParser_)
- }
-};
-
-
-/**
- * @const
- * @type {Object.>}
- * @private
- */
-ol.format.GML.MULTIPOLYGON_PARSERS_ = {
- 'http://www.opengis.net/gml' : {
- 'polygonMember': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.polygonMemberParser_),
- 'polygonMembers': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.polygonMemberParser_)
- }
-};
-
-
/**
* @const
* @type {Object.>}
@@ -940,7 +518,7 @@ ol.format.GML.POINTMEMBER_PARSERS_ = {
ol.format.GML.LINESTRINGMEMBER_PARSERS_ = {
'http://www.opengis.net/gml' : {
'LineString': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.readLineString_)
+ ol.format.GML.prototype.readLineString)
}
};
@@ -950,102 +528,12 @@ ol.format.GML.LINESTRINGMEMBER_PARSERS_ = {
* @type {Object.>}
* @private
*/
-ol.format.GML.CURVEMEMBER_PARSERS_ = {
+ol.format.GML.MULTIPOINT_PARSERS_ = {
'http://www.opengis.net/gml' : {
- 'LineString': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.readLineString_),
- 'Curve': ol.xml.makeArrayPusher(ol.format.GML.prototype.readCurve_)
- }
-};
-
-
-/**
- * @const
- * @type {Object.>}
- * @private
- */
-ol.format.GML.SURFACEMEMBER_PARSERS_ = {
- 'http://www.opengis.net/gml' : {
- 'Polygon': ol.xml.makeArrayPusher(ol.format.GML.prototype.readPolygon_),
- 'Surface': ol.xml.makeArrayPusher(ol.format.GML.prototype.readSurface_)
- }
-};
-
-
-/**
- * @const
- * @type {Object.>}
- * @private
- */
-ol.format.GML.POLYGONMEMBER_PARSERS_ = {
- 'http://www.opengis.net/gml' : {
- 'Polygon': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.readPolygon_)
- }
-};
-
-
-/**
- * @const
- * @type {Object.>}
- * @private
- */
-ol.format.GML.SURFACE_PARSERS_ = {
- 'http://www.opengis.net/gml' : {
- 'patches': ol.xml.makeReplacer(ol.format.GML.prototype.readPatch_)
- }
-};
-
-
-/**
- * @const
- * @type {Object.>}
- * @private
- */
-ol.format.GML.CURVE_PARSERS_ = {
- 'http://www.opengis.net/gml' : {
- 'segments': ol.xml.makeReplacer(ol.format.GML.prototype.readSegment_)
- }
-};
-
-
-/**
- * @const
- * @type {Object.>}
- * @private
- */
-ol.format.GML.ENVELOPE_PARSERS_ = {
- 'http://www.opengis.net/gml' : {
- 'lowerCorner': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.readFlatPosList_),
- 'upperCorner': ol.xml.makeArrayPusher(
- ol.format.GML.prototype.readFlatPosList_)
- }
-};
-
-
-/**
- * @const
- * @type {Object.>}
- * @private
- */
-ol.format.GML.PATCHES_PARSERS_ = {
- 'http://www.opengis.net/gml' : {
- 'PolygonPatch': ol.xml.makeReplacer(
- ol.format.GML.prototype.readPolygonPatch_)
- }
-};
-
-
-/**
- * @const
- * @type {Object.>}
- * @private
- */
-ol.format.GML.SEGMENTS_PARSERS_ = {
- 'http://www.opengis.net/gml' : {
- 'LineStringSegment': ol.xml.makeReplacer(
- ol.format.GML.prototype.readLineStringSegment_)
+ 'pointMember': ol.xml.makeArrayPusher(
+ ol.format.GML.prototype.pointMemberParser_),
+ 'pointMembers': ol.xml.makeArrayPusher(
+ ol.format.GML.prototype.pointMemberParser_)
}
};
@@ -1107,693 +595,3 @@ ol.format.GML.prototype.readProjectionFromNode = function(node) {
return ol.proj.get(goog.isDef(this.srsName_) ? this.srsName_ :
node.firstElementChild.getAttribute('srsName'));
};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Point} value Point geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writePos_ = function(node, value, objectStack) {
- var context = objectStack[objectStack.length - 1];
- goog.asserts.assert(goog.isObject(context));
- var srsName = goog.object.get(context, 'srsName');
- var axisOrientation = 'enu';
- if (goog.isDefAndNotNull(srsName)) {
- axisOrientation = ol.proj.get(srsName).getAxisOrientation();
- }
- var point = value.getCoordinates();
- var coords;
- // only 2d for simple features profile
- if (axisOrientation.substr(0, 2) === 'en') {
- coords = (point[0] + ' ' + point[1]);
- } else {
- coords = (point[1] + ' ' + point[0]);
- }
- ol.format.XSD.writeStringTextNode(node, coords);
-};
-
-
-/**
- * @param {Array.} point Point geometry.
- * @param {string=} opt_srsName Optional srsName
- * @return {string}
- * @private
- */
-ol.format.GML.prototype.getCoords_ = function(point, opt_srsName) {
- var axisOrientation = 'enu';
- if (goog.isDefAndNotNull(opt_srsName)) {
- axisOrientation = ol.proj.get(opt_srsName).getAxisOrientation();
- }
- return ((axisOrientation.substr(0, 2) === 'en') ?
- point[0] + ' ' + point[1] :
- point[1] + ' ' + point[0]);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.LineString|ol.geom.LinearRing} value Geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writePosList_ = function(node, value, objectStack) {
- var context = objectStack[objectStack.length - 1];
- goog.asserts.assert(goog.isObject(context));
- var srsName = goog.object.get(context, 'srsName');
- // only 2d for simple features profile
- var points = value.getCoordinates();
- var len = points.length;
- var parts = new Array(len);
- var point;
- for (var i = 0; i < len; ++i) {
- point = points[i];
- parts[i] = this.getCoords_(point, srsName);
- }
- ol.format.XSD.writeStringTextNode(node, parts.join(' '));
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Point} geometry Point geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writePoint_ = 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)) {
- node.setAttribute('srsName', srsName);
- }
- var pos = ol.xml.createElementNS(node.namespaceURI, 'pos');
- node.appendChild(pos);
- this.writePos_(pos, geometry, objectStack);
-};
-
-
-/**
- * @type {Object.>}
- * @private
- */
-ol.format.GML.ENVELOPE_SERIALIZERS_ = {
- 'http://www.opengis.net/gml': {
- 'lowerCorner': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
- 'upperCorner': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)
- }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.Extent} extent Extent.
- * @param {Array.<*>} objectStack Node stack.
- */
-ol.format.GML.prototype.writeEnvelope = function(node, extent, objectStack) {
- goog.asserts.assert(extent.length == 4);
- var context = objectStack[objectStack.length - 1];
- goog.asserts.assert(goog.isObject(context));
- var srsName = goog.object.get(context, 'srsName');
- if (goog.isDef(srsName)) {
- node.setAttribute('srsName', srsName);
- }
- var keys = ['lowerCorner', 'upperCorner'];
- var values = [extent[0] + ' ' + extent[1], extent[2] + ' ' + extent[3]];
- ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */
- ({node: node}), ol.format.GML.ENVELOPE_SERIALIZERS_,
- ol.xml.OBJECT_PROPERTY_NODE_FACTORY,
- values,
- objectStack, keys, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.LinearRing} geometry LinearRing geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writeLinearRing_ =
- 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)) {
- node.setAttribute('srsName', srsName);
- }
- var posList = ol.xml.createElementNS(node.namespaceURI, 'posList');
- node.appendChild(posList);
- this.writePosList_(posList, geometry, objectStack);
-};
-
-
-/**
- * @param {*} value Value.
- * @param {Array.<*>} objectStack Object stack.
- * @param {string=} opt_nodeName Node name.
- * @return {Node} Node.
- * @private
- */
-ol.format.GML.prototype.RING_NODE_FACTORY_ =
- function(value, objectStack, opt_nodeName) {
- var context = objectStack[objectStack.length - 1];
- var parentNode = context.node;
- goog.asserts.assert(goog.isObject(context));
- var exteriorWritten = goog.object.get(context, 'exteriorWritten');
- if (!goog.isDef(exteriorWritten)) {
- goog.object.set(context, 'exteriorWritten', true);
- }
- return ol.xml.createElementNS(parentNode.namespaceURI,
- goog.isDef(exteriorWritten) ? 'interior' : 'exterior');
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Polygon} geometry Polygon geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writeSurfaceOrPolygon_ =
- function(node, geometry, objectStack) {
- var context = objectStack[objectStack.length - 1];
- goog.asserts.assert(goog.isObject(context));
- var srsName = goog.object.get(context, 'srsName');
- if (node.nodeName !== 'PolygonPatch' && goog.isDefAndNotNull(srsName)) {
- node.setAttribute('srsName', srsName);
- }
- if (node.nodeName === 'Polygon' || node.nodeName === 'PolygonPatch') {
- var rings = geometry.getLinearRings();
- ol.xml.pushSerializeAndPop(
- {node: node, srsName: srsName},
- ol.format.GML.RING_SERIALIZERS_,
- this.RING_NODE_FACTORY_,
- rings, objectStack, undefined, this);
- } else if (node.nodeName === 'Surface') {
- var patches = ol.xml.createElementNS(node.namespaceURI, 'patches');
- node.appendChild(patches);
- this.writeSurfacePatches_(
- patches, geometry, objectStack);
- }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.LineString} geometry LineString geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writeCurveOrLineString_ =
- function(node, geometry, objectStack) {
- var context = objectStack[objectStack.length - 1];
- goog.asserts.assert(goog.isObject(context));
- var srsName = goog.object.get(context, 'srsName');
- if (node.nodeName !== 'LineStringSegment' && goog.isDefAndNotNull(srsName)) {
- node.setAttribute('srsName', srsName);
- }
- if (node.nodeName === 'LineString' || node.nodeName === 'LineStringSegment') {
- var posList = ol.xml.createElementNS(node.namespaceURI, 'posList');
- node.appendChild(posList);
- this.writePosList_(posList, geometry, objectStack);
- } else if (node.nodeName === 'Curve') {
- var segments = ol.xml.createElementNS(node.namespaceURI, 'segments');
- node.appendChild(segments);
- this.writeCurveSegments_(segments,
- geometry, objectStack);
- }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.MultiPolygon} geometry MultiPolygon geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writeMultiSurfaceOrPolygon_ = function(node, geometry,
- objectStack) {
- 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();
- ol.xml.pushSerializeAndPop({node: node, srsName: srsName, surface: surface},
- ol.format.GML.SURFACEORPOLYGONMEMBER_SERIALIZERS_,
- this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, polygons,
- objectStack, undefined, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.MultiPoint} geometry MultiPoint geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writeMultiPoint_ = 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)) {
- node.setAttribute('srsName', srsName);
- }
- var points = geometry.getPoints();
- ol.xml.pushSerializeAndPop({node: node, srsName: srsName},
- ol.format.GML.POINTMEMBER_SERIALIZERS_,
- ol.xml.makeSimpleNodeFactory('pointMember'), points,
- objectStack, undefined, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.MultiLineString} geometry MultiLineString geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writeMultiCurveOrLineString_ = 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();
- ol.xml.pushSerializeAndPop({node: node, srsName: srsName, curve: curve},
- ol.format.GML.LINESTRINGORCURVEMEMBER_SERIALIZERS_,
- this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, lines,
- objectStack, undefined, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.LinearRing} ring LinearRing geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writeRing_ = function(node, ring, objectStack) {
- var linearRing = ol.xml.createElementNS(node.namespaceURI, 'LinearRing');
- node.appendChild(linearRing);
- this.writeLinearRing_(linearRing, ring, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Polygon} polygon Polygon geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writeSurfaceOrPolygonMember_ = function(node, polygon,
- objectStack) {
- var context = objectStack[objectStack.length - 1];
- goog.asserts.assert(goog.isObject(context));
- var child = this.GEOMETRY_NODE_FACTORY_(
- polygon, objectStack);
- if (goog.isDef(child)) {
- node.appendChild(child);
- this.writeSurfaceOrPolygon_(child, polygon, objectStack);
- }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Point} point Point geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writePointMember_ = function(node, point, objectStack) {
- var child = ol.xml.createElementNS(node.namespaceURI, 'Point');
- node.appendChild(child);
- this.writePoint_(child, point, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.LineString} line LineString geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writeLineStringOrCurveMember_ = function(node, line,
- objectStack) {
- var context = objectStack[objectStack.length - 1];
- goog.asserts.assert(goog.isObject(context));
- var child = this.GEOMETRY_NODE_FACTORY_(line, objectStack);
- if (goog.isDef(child)) {
- node.appendChild(child);
- this.writeCurveOrLineString_(child, line, objectStack);
- }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Polygon} polygon Polygon geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writeSurfacePatches_ =
- function(node, polygon, objectStack) {
- var child = ol.xml.createElementNS(node.namespaceURI, 'PolygonPatch');
- node.appendChild(child);
- this.writeSurfaceOrPolygon_(child, polygon, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.LineString} line LineString geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writeCurveSegments_ =
- function(node, line, objectStack) {
- var child = ol.xml.createElementNS(node.namespaceURI, 'LineStringSegment');
- node.appendChild(child);
- this.writeCurveOrLineString_(child, line, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Geometry|ol.Extent} geometry Geometry.
- * @param {Array.<*>} objectStack Node stack.
- */
-ol.format.GML.prototype.writeGeometryElement =
- function(node, geometry, objectStack) {
- var context = objectStack[objectStack.length - 1];
- goog.asserts.assert(goog.isObject(context));
- var item = goog.object.clone(context);
- item.node = node;
- var value;
- if (goog.isArray(geometry)) {
- if (goog.isDef(context.dataProjection)) {
- value = ol.proj.transformExtent(
- geometry, context.featureProjection, context.dataProjection);
- } else {
- value = geometry;
- }
- } else {
- goog.asserts.assertInstanceof(geometry, ol.geom.Geometry);
- value =
- ol.format.Feature.transformWithOptions(geometry, true, context);
- }
- ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */
- (item), ol.format.GML.GEOMETRY_SERIALIZERS_,
- this.GEOMETRY_NODE_FACTORY_, [value],
- objectStack, undefined, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.Feature} feature Feature.
- * @param {Array.<*>} objectStack Node stack.
- */
-ol.format.GML.prototype.writeFeatureElement =
- function(node, feature, objectStack) {
- var fid = feature.getId();
- if (goog.isDef(fid)) {
- node.setAttribute('fid', fid);
- }
- var context = objectStack[objectStack.length - 1];
- goog.asserts.assert(goog.isObject(context));
- var featureNS = goog.object.get(context, 'featureNS');
- var geometryName = feature.getGeometryName();
- if (!goog.isDef(context.serializers)) {
- context.serializers = {};
- context.serializers[featureNS] = {};
- }
- var properties = feature.getProperties();
- var keys = [], values = [];
- for (var key in properties) {
- var value = properties[key];
- if (!goog.isNull(value)) {
- keys.push(key);
- values.push(value);
- if (key == geometryName) {
- if (!(key in context.serializers[featureNS])) {
- context.serializers[featureNS][key] = ol.xml.makeChildAppender(
- this.writeGeometryElement, this);
- }
- } else {
- if (!(key in context.serializers[featureNS])) {
- context.serializers[featureNS][key] = ol.xml.makeChildAppender(
- ol.format.XSD.writeStringTextNode);
- }
- }
- }
- }
- var item = goog.object.clone(context);
- item.node = node;
- ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */
- (item), context.serializers,
- ol.xml.makeSimpleNodeFactory(undefined, featureNS),
- values,
- objectStack, keys);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.} features Features.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML.prototype.writeFeatureMembers_ =
- function(node, features, objectStack) {
- var context = objectStack[objectStack.length - 1];
- goog.asserts.assert(goog.isObject(context));
- var featureType = goog.object.get(context, 'featureType');
- var featureNS = goog.object.get(context, 'featureNS');
- var serializers = {};
- serializers[featureNS] = {};
- serializers[featureNS][featureType] = ol.xml.makeChildAppender(
- this.writeFeatureElement, this);
- var item = goog.object.clone(context);
- item.node = node;
- ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */
- (item),
- serializers,
- ol.xml.makeSimpleNodeFactory(featureType, featureNS), features,
- objectStack);
-};
-
-
-/**
- * @type {Object.>}
- * @private
- */
-ol.format.GML.SURFACEORPOLYGONMEMBER_SERIALIZERS_ = {
- 'http://www.opengis.net/gml': {
- 'surfaceMember': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeSurfaceOrPolygonMember_),
- 'polygonMember': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeSurfaceOrPolygonMember_)
- }
-};
-
-
-/**
- * @type {Object.>}
- * @private
- */
-ol.format.GML.POINTMEMBER_SERIALIZERS_ = {
- 'http://www.opengis.net/gml': {
- 'pointMember': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writePointMember_)
- }
-};
-
-
-/**
- * @type {Object.>}
- * @private
- */
-ol.format.GML.LINESTRINGORCURVEMEMBER_SERIALIZERS_ = {
- 'http://www.opengis.net/gml': {
- 'lineStringMember': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeLineStringOrCurveMember_),
- 'curveMember': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeLineStringOrCurveMember_)
- }
-};
-
-
-/**
- * @type {Object.>}
- * @private
- */
-ol.format.GML.RING_SERIALIZERS_ = {
- 'http://www.opengis.net/gml': {
- 'exterior': ol.xml.makeChildAppender(ol.format.GML.prototype.writeRing_),
- 'interior': ol.xml.makeChildAppender(ol.format.GML.prototype.writeRing_)
- }
-};
-
-
-/**
- * @type {Object.>}
- * @private
- */
-ol.format.GML.GEOMETRY_SERIALIZERS_ = {
- 'http://www.opengis.net/gml': {
- 'Curve': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeCurveOrLineString_),
- 'MultiCurve': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeMultiCurveOrLineString_),
- 'Point': ol.xml.makeChildAppender(ol.format.GML.prototype.writePoint_),
- 'MultiPoint': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeMultiPoint_),
- 'LineString': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeCurveOrLineString_),
- 'MultiLineString': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeMultiCurveOrLineString_),
- 'LinearRing': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeLinearRing_),
- 'Polygon': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeSurfaceOrPolygon_),
- 'MultiPolygon': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeMultiSurfaceOrPolygon_),
- 'Surface': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeSurfaceOrPolygon_),
- 'MultiSurface': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeMultiSurfaceOrPolygon_),
- 'Envelope': ol.xml.makeChildAppender(
- ol.format.GML.prototype.writeEnvelope)
- }
-};
-
-
-/**
- * @const
- * @type {Object.}
- * @private
- */
-ol.format.GML.MULTIGEOMETRY_TO_MEMBER_NODENAME_ = {
- 'MultiLineString': 'lineStringMember',
- 'MultiCurve': 'curveMember',
- 'MultiPolygon': 'polygonMember',
- 'MultiSurface': 'surfaceMember'
-};
-
-
-/**
- * @const
- * @param {*} value Value.
- * @param {Array.<*>} objectStack Object stack.
- * @param {string=} opt_nodeName Node name.
- * @return {Node|undefined} Node.
- * @private
- */
-ol.format.GML.prototype.MULTIGEOMETRY_MEMBER_NODE_FACTORY_ = function(value,
- objectStack, opt_nodeName) {
- var parentNode = objectStack[objectStack.length - 1].node;
- goog.asserts.assert(ol.xml.isNode(parentNode));
- return ol.xml.createElementNS('http://www.opengis.net/gml',
- ol.format.GML.MULTIGEOMETRY_TO_MEMBER_NODENAME_[parentNode.nodeName]);
-};
-
-
-/**
- * @const
- * @param {*} value Value.
- * @param {Array.<*>} objectStack Object stack.
- * @param {string=} opt_nodeName Node name.
- * @return {Node|undefined} Node.
- * @private
- */
-ol.format.GML.prototype.GEOMETRY_NODE_FACTORY_ = function(value, objectStack,
- opt_nodeName) {
- var context = objectStack[objectStack.length - 1];
- goog.asserts.assert(goog.isObject(context));
- var multiSurface = goog.object.get(context, 'multiSurface');
- var surface = goog.object.get(context, 'surface');
- var curve = goog.object.get(context, 'curve');
- var multiCurve = goog.object.get(context, 'multiCurve');
- var parentNode = objectStack[objectStack.length - 1].node;
- goog.asserts.assert(ol.xml.isNode(parentNode));
- var nodeName;
- if (!goog.isArray(value)) {
- goog.asserts.assertInstanceof(value, ol.geom.Geometry);
- nodeName = value.getType();
- if (nodeName === 'MultiPolygon' && multiSurface === true) {
- nodeName = 'MultiSurface';
- } else if (nodeName === 'Polygon' && surface === true) {
- nodeName = 'Surface';
- } else if (nodeName === 'LineString' && curve === true) {
- nodeName = 'Curve';
- } else if (nodeName === 'MultiLineString' && multiCurve === true) {
- nodeName = 'MultiCurve';
- }
- } else {
- nodeName = 'Envelope';
- }
- return ol.xml.createElementNS('http://www.opengis.net/gml',
- nodeName);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.GML.prototype.writeGeometryNode = function(geometry, opt_options) {
- var geom = ol.xml.createElementNS('http://www.opengis.net/gml', 'geom');
- var context = {node: geom, srsName: this.srsName_,
- curve: this.curve_, surface: this.surface_,
- multiSurface: this.multiSurface_, multiCurve: this.multiCurve_};
- if (goog.isDef(opt_options)) {
- goog.object.extend(context, opt_options);
- }
- this.writeGeometryElement(geom, geometry, [context]);
- return geom;
-};
-
-
-/**
- * Encode an array of features in GML 3.1.1 Simple Features.
- *
- * @function
- * @param {Array.} features Features.
- * @param {olx.format.WriteOptions=} opt_options Options.
- * @return {Node} Result.
- * @api stable
- */
-ol.format.GML.prototype.writeFeatures;
-
-
-/**
- * @inheritDoc
- */
-ol.format.GML.prototype.writeFeaturesNode = function(features, opt_options) {
- var node = ol.xml.createElementNS('http://www.opengis.net/gml',
- 'featureMembers');
- ol.xml.setAttributeNS(node, 'http://www.w3.org/2001/XMLSchema-instance',
- 'xsi:schemaLocation', this.schemaLocation);
- var context = {
- srsName: this.srsName_,
- curve: this.curve_,
- surface: this.surface_,
- multiSurface: this.multiSurface_,
- multiCurve: this.multiCurve_,
- featureNS: this.featureNS_,
- featureType: this.featureType_
- };
- if (goog.isDef(opt_options)) {
- goog.object.extend(context, opt_options);
- }
- this.writeFeatureMembers_(node, features, [context]);
- return node;
-};