diff --git a/lib/OpenLayers/Protocol/WFS/v1.js b/lib/OpenLayers/Protocol/WFS/v1.js index a7ac3251f4..b5e7a6732d 100644 --- a/lib/OpenLayers/Protocol/WFS/v1.js +++ b/lib/OpenLayers/Protocol/WFS/v1.js @@ -77,7 +77,7 @@ OpenLayers.Protocol.WFS.v1 = OpenLayers.Class(OpenLayers.Protocol, { * the response with the default format (WFST) and we need a different * format for reading. */ - readFormat: null, + readFormat: null, /** * Property: readOptions diff --git a/lib/OpenLayers/Protocol/WFS/v1_1_0.js b/lib/OpenLayers/Protocol/WFS/v1_1_0.js index b670835ada..b70d4f07f6 100644 --- a/lib/OpenLayers/Protocol/WFS/v1_1_0.js +++ b/lib/OpenLayers/Protocol/WFS/v1_1_0.js @@ -42,7 +42,27 @@ OpenLayers.Protocol.WFS.v1_1_0 = OpenLayers.Class(OpenLayers.Protocol.WFS.v1, { * featurePrefix - {String} Feature namespace alias (optional - only used * if featureNS is provided). Default is 'feature'. * geometryName - {String} Name of geometry attribute. Default is 'the_geom'. + * outputFormat - {String} Optional output format to use for WFS GetFeature + * requests. This can be any format advertized by the WFS's + * GetCapabilities response. If set, an appropriate readFormat also + * has to be provided, unless outputFormat is GML3, GML2 or JSON. + * readFormat - {} An appropriate format parser if + * outputFormat is none of GML3, GML2 or JSON. */ + initialize: function(options) { + OpenLayers.Protocol.WFS.v1.prototype.initialize.apply(this, arguments); + if (this.outputFormat && !this.readFormat) { + if (this.outputFormat.toLowerCase() == "gml2") { + this.readFormat = new OpenLayers.Format.GML.v2({ + featureType: this.featureType, + featureNS: this.featureNS, + geometryName: this.geometryName + }); + } else if (this.outputFormat.toLowerCase() == "json") { + this.readFormat = new OpenLayers.Format.GeoJSON(); + } + } + }, CLASS_NAME: "OpenLayers.Protocol.WFS.v1_1_0" }); diff --git a/tests/Protocol/WFS.html b/tests/Protocol/WFS.html index 8347932b48..f2e950a96a 100644 --- a/tests/Protocol/WFS.html +++ b/tests/Protocol/WFS.html @@ -228,6 +228,30 @@ t.eq(features.length, 1, "the right format is used to read the request (GeoJSON)"); } + function test_outputFormat(t) { + t.plan(2); + + var protocol = new OpenLayers.Protocol.WFS({ + version: "1.1.0", + url: "http://some.url.org", + featureNS: "http://namespace.org", + featureType: "type", + outputFormat: 'json' + }); + + t.ok(protocol.readFormat instanceof OpenLayers.Format.GeoJSON, "the correct readFormat is used for outputFormat JSON"); + + protocol = new OpenLayers.Protocol.WFS({ + version: "1.1.0", + url: "http://some.url.org", + featureNS: "http://namespace.org", + featureType: "type", + outputFormat: 'GML2' + }); + + t.ok(protocol.readFormat instanceof OpenLayers.Format.GML.v2, "the correct readFormat is used for outputFormat GML2"); + } + function test_readOptions(t) { t.plan(1);