[OpenLayers-Commits] r2028 - sandbox/vector/lib/OpenLayers/Writer

commits at openlayers.org commits at openlayers.org
Fri Dec 8 10:17:20 EST 2006


Author: pgiraud
Date: 2006-12-08 10:17:19 -0500 (Fri, 08 Dec 2006)
New Revision: 2028

Modified:
   sandbox/vector/lib/OpenLayers/Writer/GML.js
Log:
added support for different geometries

Modified: sandbox/vector/lib/OpenLayers/Writer/GML.js
===================================================================
--- sandbox/vector/lib/OpenLayers/Writer/GML.js	2006-12-08 09:26:29 UTC (rev 2027)
+++ sandbox/vector/lib/OpenLayers/Writer/GML.js	2006-12-08 15:17:19 UTC (rev 2028)
@@ -23,23 +23,82 @@
      * @param {OpenLayers.Geometry} geometry
      */
     buildXmlNode: function(geometry) {
-        this.gml = document.createElementNS("http://www.opengis.net/gml", 'gml:MultiLineString');
+    // TBD test if geoserver can be given a Multi-geometry for a simple-geometry data store
+    // ie if multipolygon can be sent for a polygon feature type
+    
+        // match MultiPolygon or Polygon
+        if (geometry.CLASS_NAME == "OpenLayers.Geometry.MultiPolygon"
+            || geometry.CLASS_NAME == "OpenLayers.Geometry.Polygon") {
+            this.gml = document.createElementNS("http://www.opengis.net/gml", 'gml:MultiPolygon');
+            
+            // TBD retrieve the srs from layer
+            this.gml.setAttribute("srsName", "http://www.opengis.net/gml/srs/epsg.xml#4326");
+            
+            var polygonMember = document.createElementNS("http://www.opengis.net/gml", 'gml:polygonMember');
+            
+            var polygon = document.createElementNS("http://www.opengis.net/gml", 'gml:Polygon');
+            var outerRing = document.createElementNS("http://www.opengis.net/gml", 'gml:outerBoundaryIs');
+            var linearRing = document.createElementNS("http://www.opengis.net/gml", 'gml:LinearRing');
+            
+            // TBD manage polygons with holes
+            linearRing.appendChild(this.buildCoordinatesNode(geometry.components[0]));
+            outerRing.appendChild(linearRing);
+            polygon.appendChild(outerRing);
+            polygonMember.appendChild(polygon);
+            
+            this.gml.appendChild(polygonMember);
+        }
+        // match MultiLineString or LineString
+        else if (geometry.CLASS_NAME == "OpenLayers.Geometry.MultiLineString"
+            || geometry.CLASS_NAME == "OpenLayers.Geometry.LineString") {
+            this.gml = document.createElementNS("http://www.opengis.net/gml", 'gml:MultiLineString');
+            
+            // TBD retrieve the srs from layer
+            this.gml.setAttribute("srsName", "http://www.opengis.net/gml/srs/epsg.xml#4326");
+            
+            var lineStringMember = document.createElementNS("http://www.opengis.net/gml", 'gml:lineStringMember');
+            
+            var lineString = document.createElementNS("http://www.opengis.net/gml", 'gml:LineString');
+            
+            lineString.appendChild(this.buildCoordinatesNode(geometry));
+            lineStringMember.appendChild(lineString);
+            
+            this.gml.appendChild(lineStringMember);
+        }
+        // match MultiPoint or Point
+        else if (geometry.CLASS_NAME == "OpenLayers.Geometry.MultiPoint"
+            || geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
+            this.gml = document.createElementNS("http://www.opengis.net/gml", 'gml:MultiPoint');
+            
+            // TBD retrieve the srs from layer
+            this.gml.setAttribute("srsName", "http://www.opengis.net/gml/srs/epsg.xml#4326");
+            
+            var polygonMember = document.createElementNS("http://www.opengis.net/gml", 'gml:polygonMember');
+            
+            var polygon = document.createElementNS("http://www.opengis.net/gml", 'gml:Polygon');
+            
+            polygon.appendChild(this.buildCoordinatesNode(geometry));
+            polygonMember.appendChild(polygon);
+            
+            this.gml.appendChild(polygonMember);
+        }
+    },
+    
+    /**
+     * builds the coordinates XmlNode
+     * <gml:coordinates decimal="." cs="," ts=" ">...</gml:coordinates>
+     *
+     * @param {OpenLayers.Geometry} geometry
+     * @return {XmlNode} created xmlNode
+     */
+    buildCoordinatesNode: function(geometry) {
+        var coordinatesNode = document.createElementNS("http://www.opengis.net/gml", "gml:coordinates");
+        coordinatesNode.setAttribute("decimal", ".");
+        coordinatesNode.setAttribute("cs", ",");
+        coordinatesNode.setAttribute("ts", " ");
         
-        // TBD retrieve the srs from layer
-        this.gml.setAttribute("srsName", "http://www.opengis.net/gml/srs/epsg.xml#4326");
-        
-        var lineStringMember = document.createElementNS("http://www.opengis.net/gml", 'gml:lineStringMember');
-        
-        var lineString = document.createElementNS("http://www.opengis.net/gml", 'gml:LineString');
-        
-        var coordinates = document.createElementNS("http://www.opengis.net/gml", "gml:coordinates");
-        coordinates.setAttribute("decimal", ".");
-        coordinates.setAttribute("cs", ",");
-        coordinates.setAttribute("ts", " ");
-        
         if (geometry.components) {
             var points = geometry.components[0].path;
-            
         } else {
             var points = geometry.path;
         }
@@ -49,12 +108,9 @@
         }
         
         var txtNode = document.createTextNode(path);
-        coordinates.appendChild(txtNode);
+        coordinatesNode.appendChild(txtNode);
         
-        lineString.appendChild(coordinates);
-        lineStringMember.appendChild(lineString);
-        
-        this.gml.appendChild(lineStringMember);
+        return coordinatesNode;
     },
     
     CLASS_NAME: "OpenLayers.Writer.GML"



More information about the Commits mailing list