diff --git a/lib/OpenLayers/Format/SLD/v1.js b/lib/OpenLayers/Format/SLD/v1.js index f4fcb40f5f..30440a8f50 100644 --- a/lib/OpenLayers/Format/SLD/v1.js +++ b/lib/OpenLayers/Format/SLD/v1.js @@ -210,6 +210,29 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { symbolizer.haloRadius = radius; } }, + "RasterSymbolizer": function(node, rule) { + // OpenLayers doesn't do painter's order, instead we extend + var symbolizer = rule.symbolizer["Raster"] || {}; + this.readChildNodes(node, symbolizer); + // in case it didn't exist before + rule.symbolizer["Raster"] = symbolizer; + }, + "Geometry": function(node, obj) { + obj.geometry = {}; + this.readChildNodes(node, obj.geometry); + }, + "ColorMap": function(node, symbolizer) { + symbolizer.colorMap = []; + this.readChildNodes(node, symbolizer.colorMap); + }, + "ColorMapEntry": function(node, colorMap) { + colorMap.push({ + color: node.getAttribute("color"), + quantity: node.getAttribute("quantity") || undefined, + label: node.getAttribute("label") || undefined, + opacity: node.getAttribute("opacity") || undefined + }); + }, "LineSymbolizer": function(node, rule) { // OpenLayers doesn't do painter's order, instead we extend var symbolizer = rule.symbolizer["Line"] || {}; @@ -780,10 +803,48 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { return node; }, "Radius": function(value) { - return node = this.createElementNSPlus("sld:Radius", { + return this.createElementNSPlus("sld:Radius", { value: value }); }, + "RasterSymbolizer": function(symbolizer) { + var node = this.createElementNSPlus("sld:RasterSymbolizer"); + if (symbolizer.geometry) { + this.writeNode("Geometry", symbolizer.geometry, node); + } + if (symbolizer.opacity) { + this.writeNode("Opacity", symbolizer.opacity, node); + } + if (symbolizer.colorMap) { + this.writeNode("ColorMap", symbolizer.colorMap, node); + } + return node; + }, + "Geometry": function(geometry) { + var node = this.createElementNSPlus("sld:Geometry"); + if (geometry.property) { + this.writeNode("ogc:PropertyName", geometry, node); + } + return node; + }, + "ColorMap": function(colorMap) { + var node = this.createElementNSPlus("sld:ColorMap"); + for (var i=0, len=colorMap.length; i' + + '' + + 'geom' + + '' + + '1' + + '' + + '' + + '' + + '' + + '' + + ''; + var expected = new OpenLayers.Format.XML().read(snippet).documentElement; + + var symbolizer = {}; + format.readNode(expected, {symbolizer: symbolizer}); + + var got = format.writeNode("sld:RasterSymbolizer", symbolizer["Raster"]); + + t.xml_eq(got, expected, "Successfully round tripped RasterSymbolizer"); }