| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- /* Copyright (c) 2006-2011 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/Tile.js
- * @requires OpenLayers/Request/XMLHttpRequest.js
- */
- /**
- * Class: OpenLayers.Tile.WFS
- * Instances of OpenLayers.Tile.WFS are used to manage the image tiles
- * used by various layers. Create a new image tile with the
- * <OpenLayers.Tile.WFS> constructor.
- *
- * Inherits from:
- * - <OpenLayers.Tile>
- */
- OpenLayers.Tile.WFS = OpenLayers.Class(OpenLayers.Tile, {
- /**
- * Property: features
- * {Array(<OpenLayers.Feature>)} list of features in this tile
- */
- features: null,
- /**
- * Property: url
- * {String}
- */
- url: null,
-
- /**
- * Property: request
- * {<OpenLayers.Request.XMLHttpRequest>}
- */
- request: null,
-
- /** TBD 3.0 - reorder the parameters to the init function to put URL
- * as last, so we can continue to call tile.initialize()
- * without changing the arguments.
- *
- * Constructor: OpenLayers.Tile.WFS
- * Constructor for a new <OpenLayers.Tile.WFS> instance.
- *
- * Parameters:
- * layer - {<OpenLayers.Layer>} layer that the tile will go in.
- * position - {<OpenLayers.Pixel>}
- * bounds - {<OpenLayers.Bounds>}
- * url - {<String>}
- * size - {<OpenLayers.Size>}
- */
- initialize: function(layer, position, bounds, url, size) {
- OpenLayers.Tile.prototype.initialize.apply(this, arguments);
- this.url = url;
- this.features = [];
- },
- /**
- * APIMethod: destroy
- * nullify references to prevent circular references and memory leaks
- */
- destroy: function() {
- OpenLayers.Tile.prototype.destroy.apply(this, arguments);
- this.destroyAllFeatures();
- this.features = null;
- this.url = null;
- if(this.request) {
- this.request.abort();
- //this.request.destroy();
- this.request = null;
- }
- },
- /**
- * Method: clear
- * Clear the tile of any bounds/position-related data so that it can
- * be reused in a new location.
- */
- clear: function() {
- this.destroyAllFeatures();
- },
-
- /**
- * Method: draw
- * Check that a tile should be drawn, and load features for it.
- */
- draw:function() {
- if (OpenLayers.Tile.prototype.draw.apply(this, arguments)) {
- if (this.isLoading) {
- //if already loading, send 'reload' instead of 'loadstart'.
- this.events.triggerEvent("reload");
- } else {
- this.isLoading = true;
- this.events.triggerEvent("loadstart");
- }
- this.loadFeaturesForRegion(this.requestSuccess);
- }
- },
- /**
- * Method: loadFeaturesForRegion
- * Abort any pending requests and issue another request for data.
- *
- * Input are function pointers for what to do on success and failure.
- *
- * Parameters:
- * success - {function}
- * failure - {function}
- */
- loadFeaturesForRegion:function(success, failure) {
- if(this.request) {
- this.request.abort();
- }
- this.request = OpenLayers.Request.GET({
- url: this.url,
- success: success,
- failure: failure,
- scope: this
- });
- },
-
- /**
- * Method: requestSuccess
- * Called on return from request succcess. Adds results via
- * layer.addFeatures in vector mode, addResults otherwise.
- *
- * Parameters:
- * request - {<OpenLayers.Request.XMLHttpRequest>}
- */
- requestSuccess:function(request) {
- if (this.features) {
- var doc = request.responseXML;
- if (!doc || !doc.documentElement) {
- doc = request.responseText;
- }
- if (this.layer.vectorMode) {
- this.layer.addFeatures(this.layer.formatObject.read(doc));
- } else {
- var xml = new OpenLayers.Format.XML();
- if (typeof doc == "string") {
- doc = xml.read(doc);
- }
- var resultFeatures = xml.getElementsByTagNameNS(
- doc, "http://www.opengis.net/gml", "featureMember"
- );
- this.addResults(resultFeatures);
- }
- }
- if (this.events) {
- this.events.triggerEvent("loadend");
- }
- //request produced with success, we can delete the request object.
- //this.request.destroy();
- this.request = null;
- },
- /**
- * Method: addResults
- * Construct new feature via layer featureClass constructor, and add to
- * this.features.
- *
- * Parameters:
- * results - {Object}
- */
- addResults: function(results) {
- for (var i=0; i < results.length; i++) {
- var feature = new this.layer.featureClass(this.layer,
- results[i]);
- this.features.push(feature);
- }
- },
- /**
- * Method: destroyAllFeatures
- * Iterate through and call destroy() on each feature, removing it from
- * the local array
- */
- destroyAllFeatures: function() {
- while(this.features.length > 0) {
- var feature = this.features.shift();
- feature.destroy();
- }
- },
- CLASS_NAME: "OpenLayers.Tile.WFS"
- }
- );
|