[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