Bienvenue sur PostGIS.fr

Bienvenue sur PostGIS.fr , le site de la communauté des utilisateurs francophones de PostGIS.

PostGIS ajoute le support d'objets géographique à la base de données PostgreSQL. En effet, PostGIS "spatialise" le serverur PostgreSQL, ce qui permet de l'utiliser comme une base de données SIG.

Maintenu à jour, en fonction de nos disponibilités et des diverses sorties des outils que nous testons, nous vous proposons l'ensemble de nos travaux publiés en langue française.

source: trunk/workshop-routing-foss4g/web/OpenLayers/lib/OpenLayers/Format/WFS.js @ 76

Revision 76, 7.4 KB checked in by djay, 12 years ago (diff)

Ajout du répertoire web

  • Property svn:executable set to *
Line 
1/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for
2 * full list of contributors). Published under the Clear BSD license. 
3 * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
4 * full text of the license. */
5
6/**
7 * @requires OpenLayers/Format/GML.js
8 * @requires OpenLayers/Console.js
9 */
10
11/**
12 * Class: OpenLayers.Format.WFS
13 * Read/Write WFS.
14 *
15 * Inherits from:
16 *  - <OpenLayers.Format.GML>
17 */
18OpenLayers.Format.WFS = OpenLayers.Class(OpenLayers.Format.GML, {
19   
20    /**
21     * Property: layer
22     */
23    layer: null,
24   
25    /**
26     * APIProperty: wfsns
27     */
28    wfsns: "http://www.opengis.net/wfs",
29   
30    /**
31     * Property: ogcns
32     */
33    ogcns: "http://www.opengis.net/ogc",
34   
35    /*
36     * Constructor: OpenLayers.Format.WFS
37     * Create a WFS-T formatter. This requires a layer: that layer should
38     * have two properties: geometry_column and typename. The parser
39     * for this format is subclassed entirely from GML: There is a writer
40     * only, which uses most of the code from the GML layer, and wraps
41     * it in transactional elements.
42     *
43     * Parameters:
44     * options - {Object}
45     * layer - {<OpenLayers.Layer>}
46     */
47   
48    initialize: function(options, layer) {
49        OpenLayers.Format.GML.prototype.initialize.apply(this, [options]);
50        this.layer = layer;
51        if (this.layer.featureNS) {
52            this.featureNS = this.layer.featureNS;
53        }   
54        if (this.layer.options.geometry_column) {
55            this.geometryName = this.layer.options.geometry_column;
56        }
57        if (this.layer.options.typename) {
58            this.featureName = this.layer.options.typename;
59        }
60    },
61   
62    /**
63     * Method: write
64     * Takes a feature list, and generates a WFS-T Transaction
65     *
66     * Parameters:
67     * features - {Array(<OpenLayers.Feature.Vector>)}
68     */
69    write: function(features) {
70   
71        var transaction = this.createElementNS(this.wfsns, 'wfs:Transaction');
72        transaction.setAttribute("version","1.0.0");
73        transaction.setAttribute("service","WFS");
74        for (var i=0; i < features.length; i++) {
75            switch (features[i].state) {
76                case OpenLayers.State.INSERT:
77                    transaction.appendChild(this.insert(features[i]));
78                    break;
79                case OpenLayers.State.UPDATE:
80                    transaction.appendChild(this.update(features[i]));
81                    break;
82                case OpenLayers.State.DELETE:
83                    transaction.appendChild(this.remove(features[i]));
84                    break;
85            }
86        }
87       
88        return OpenLayers.Format.XML.prototype.write.apply(this,[transaction]);
89    },
90   
91    /**
92     * Method: createFeatureXML
93     *
94     * Parameters:
95     * feature - {<OpenLayers.Feature.Vector>}
96     */ 
97    createFeatureXML: function(feature) {
98        var geometryNode = this.buildGeometryNode(feature.geometry);
99        var geomContainer = this.createElementNS(this.featureNS, "feature:" + this.geometryName);
100        geomContainer.appendChild(geometryNode);
101        var featureContainer = this.createElementNS(this.featureNS, "feature:" + this.featureName);
102        featureContainer.appendChild(geomContainer);
103        for(var attr in feature.attributes) {
104            var attrText = this.createTextNode(feature.attributes[attr]); 
105            var nodename = attr;
106            if (attr.search(":") != -1) {
107                nodename = attr.split(":")[1];
108            }   
109            var attrContainer = this.createElementNS(this.featureNS, "feature:" + nodename);
110            attrContainer.appendChild(attrText);
111            featureContainer.appendChild(attrContainer);
112        }   
113        return featureContainer;
114    },
115   
116    /**
117     * Method: insert
118     * Takes a feature, and generates a WFS-T Transaction "Insert"
119     *
120     * Parameters:
121     * feature - {<OpenLayers.Feature.Vector>}
122     */
123    insert: function(feature) {
124        var insertNode = this.createElementNS(this.wfsns, 'wfs:Insert');
125        insertNode.appendChild(this.createFeatureXML(feature));
126        return insertNode;
127    },
128   
129    /**
130     * Method: update
131     * Takes a feature, and generates a WFS-T Transaction "Update"
132     *
133     * Parameters:
134     * feature - {<OpenLayers.Feature.Vector>}
135     */
136    update: function(feature) {
137        if (!feature.fid) { OpenLayers.Console.userError(OpenLayers.i18n("noFID")); }
138        var updateNode = this.createElementNS(this.wfsns, 'wfs:Update');
139        updateNode.setAttribute("typeName", this.featurePrefix + ':' + this.featureName); 
140        updateNode.setAttribute("xmlns:" + this.featurePrefix, this.featureNS); 
141
142        var propertyNode = this.createElementNS(this.wfsns, 'wfs:Property');
143        var nameNode = this.createElementNS(this.wfsns, 'wfs:Name');
144       
145        var txtNode = this.createTextNode(this.geometryName);
146        nameNode.appendChild(txtNode);
147        propertyNode.appendChild(nameNode);
148       
149        var valueNode = this.createElementNS(this.wfsns, 'wfs:Value');
150       
151        var geometryNode = this.buildGeometryNode(feature.geometry);
152       
153        if(feature.layer){
154            geometryNode.setAttribute(
155                "srsName", feature.layer.projection.getCode()
156            );
157        }
158       
159        valueNode.appendChild(geometryNode);
160       
161        propertyNode.appendChild(valueNode);
162        updateNode.appendChild(propertyNode);
163       
164         // add in attributes
165        for(var propName in feature.attributes) {
166            propertyNode = this.createElementNS(this.wfsns, 'wfs:Property');
167            nameNode = this.createElementNS(this.wfsns, 'wfs:Name');
168            nameNode.appendChild(this.createTextNode(propName));
169            propertyNode.appendChild(nameNode);
170            valueNode = this.createElementNS(this.wfsns, 'wfs:Value');
171            valueNode.appendChild(this.createTextNode(feature.attributes[propName]));
172            propertyNode.appendChild(valueNode);
173            updateNode.appendChild(propertyNode);
174        }
175       
176       
177        var filterNode = this.createElementNS(this.ogcns, 'ogc:Filter');
178        var filterIdNode = this.createElementNS(this.ogcns, 'ogc:FeatureId');
179        filterIdNode.setAttribute("fid", feature.fid);
180        filterNode.appendChild(filterIdNode);
181        updateNode.appendChild(filterNode);
182
183        return updateNode;
184    },
185   
186    /**
187     * Method: remove
188     * Takes a feature, and generates a WFS-T Transaction "Delete"
189     *
190     * Parameters:
191     * feature - {<OpenLayers.Feature.Vector>}
192     */
193    remove: function(feature) {
194        if (!feature.fid) { 
195            OpenLayers.Console.userError(OpenLayers.i18n("noFID")); 
196            return false; 
197        }
198        var deleteNode = this.createElementNS(this.wfsns, 'wfs:Delete');
199        deleteNode.setAttribute("typeName", this.featurePrefix + ':' + this.featureName); 
200        deleteNode.setAttribute("xmlns:" + this.featurePrefix, this.featureNS); 
201
202        var filterNode = this.createElementNS(this.ogcns, 'ogc:Filter');
203        var filterIdNode = this.createElementNS(this.ogcns, 'ogc:FeatureId');
204        filterIdNode.setAttribute("fid", feature.fid);
205        filterNode.appendChild(filterIdNode);
206        deleteNode.appendChild(filterNode);
207
208        return deleteNode;
209    },
210
211    /**
212     * APIMethod: destroy
213     * Remove ciruclar ref to layer
214     */
215    destroy: function() {
216        this.layer = null;
217    },
218
219    CLASS_NAME: "OpenLayers.Format.WFS" 
220});   
Note: See TracBrowser for help on using the repository browser.