1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | /* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for * full list of contributors). Published under the Clear BSD license. * See http://svn.openlayers.org/trunk/openlayers/license.txt for the * full text of the license. */ /** * @requires OpenLayers/Protocol/SOS.js * @requires OpenLayers/Format/SOSGetFeatureOfInterest.js */ /** * Class: OpenLayers.Protocol.SOS.v1_0_0 * An SOS v1.0.0 Protocol for vector layers. Create a new instance with the * <OpenLayers.Protocol.SOS.v1_0_0> constructor. * * Inherits from: * - <OpenLayers.Protocol> */ OpenLayers.Protocol.SOS.v1_0_0 = OpenLayers.Class(OpenLayers.Protocol, { /** * APIProperty: fois * {Array(String)} Array of features of interest (foi) */ fois: null, /** * Property: formatOptions * {Object} Optional options for the format. If a format is not provided, * this property can be used to extend the default format options. */ formatOptions: null, /** * Constructor: OpenLayers.Protocol.SOS * A class for giving layers an SOS protocol. * * Parameters: * options - {Object} Optional object whose properties will be set on the * instance. * Valid options properties: * url - {String} URL to send requests to (required). * fois - {Array} The features of interest (required). */ initialize: function(options) { OpenLayers.Protocol.prototype.initialize.apply(this, [options]); if(!options.format) { this.format = new OpenLayers.Format.SOSGetFeatureOfInterest( this.formatOptions); } }, /** * APIMethod: destroy * Clean up the protocol. */ destroy: function() { if(this.options && !this.options.format) { this.format.destroy(); } this.format = null; OpenLayers.Protocol.prototype.destroy.apply(this); }, /** * APIMethod: read * Construct a request for reading new sensor positions. This is done by * issuing one GetFeatureOfInterest request. */ read: function(options) { options = OpenLayers.Util.extend({}, options); OpenLayers.Util.applyDefaults(options, this.options || {}); var response = new OpenLayers.Protocol.Response({requestType: "read"}); var format = this.format; var data = OpenLayers.Format.XML.prototype.write.apply(format, [format.writeNode("sos:GetFeatureOfInterest", {fois: this.fois})] ); response.priv = OpenLayers.Request.POST({ url: options.url, callback: this.createCallback(this.handleRead, response, options), data: data }); return response; }, /** * Method: handleRead * Deal with response from the read request. * * Parameters: * response - {<OpenLayers.Protocol.Response>} The response object to pass * to the user callback. * options - {Object} The user options passed to the read call. */ handleRead: function(response, options) { if(options.callback) { var request = response.priv; if(request.status >= 200 && request.status < 300) { // success response.features = this.parseFeatures(request); response.code = OpenLayers.Protocol.Response.SUCCESS; } else { // failure response.code = OpenLayers.Protocol.Response.FAILURE; } options.callback.call(options.scope, response); } }, /** * Method: parseFeatures * Read HTTP response body and return features * * Parameters: * request - {XMLHttpRequest} The request object * * Returns: * {Array({<OpenLayers.Feature.Vector>})} Array of features */ parseFeatures: function(request) { var doc = request.responseXML; if(!doc || !doc.documentElement) { doc = request.responseText; } if(!doc || doc.length <= 0) { return null; } return this.format.read(doc); }, CLASS_NAME: "OpenLayers.Protocol.SOS.v1_0_0" }); |