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:
@@ -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 ||
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user