added partial support for RasterSymbolizer to Format.SLD. r=bartvde (closes #2642)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@10344 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
ahocevar
2010-05-20 08:42:55 +00:00
parent ef87d15cfe
commit f52cd8972a
2 changed files with 88 additions and 1 deletions

View File

@@ -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<len; ++i) {
this.writeNode("ColorMapEntry", colorMap[i], node);
}
return node;
},
"ColorMapEntry": function(colorMapEntry) {
var node = this.createElementNSPlus("sld:ColorMapEntry");
var a = colorMapEntry;
node.setAttribute("color", a.color);
a.opacity && node.setAttribute("opacity",
parseFloat(a.opacity));
a.quantity && node.setAttribute("quantity",
parseFloat(a.quantity));
a.label && node.setAttribute("label", a.label);
return node;
},
"PolygonSymbolizer": function(symbolizer) {
var node = this.createElementNSPlus("sld:PolygonSymbolizer");
if(symbolizer.fillColor != undefined ||

View File

@@ -407,7 +407,33 @@
t.xml_eq(sld, expect, "rule with spatial filter correctly written");
}
function test_RasterSymbolizer(t) {
t.plan(1);
var format = new OpenLayers.Format.SLD.v1_0_0();
var snippet =
'<sld:RasterSymbolizer xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc">' +
'<sld:Geometry>' +
'<ogc:PropertyName>geom</ogc:PropertyName>' +
'</sld:Geometry>' +
'<sld:Opacity>1</sld:Opacity>' +
'<sld:ColorMap>' +
'<sld:ColorMapEntry color="#000000" opacity="0.5" quantity="0" label="nodata"/>' +
'<sld:ColorMapEntry color="#00FFFF" quantity="1" label="values"/>' +
'<sld:ColorMapEntry color="#FF0000" quantity="1000" label="values"/>' +
'</sld:ColorMap>' +
'</sld:RasterSymbolizer>';
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");
}
</script>