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;
|
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) {
|
"LineSymbolizer": function(node, rule) {
|
||||||
// OpenLayers doesn't do painter's order, instead we extend
|
// OpenLayers doesn't do painter's order, instead we extend
|
||||||
var symbolizer = rule.symbolizer["Line"] || {};
|
var symbolizer = rule.symbolizer["Line"] || {};
|
||||||
@@ -780,10 +803,48 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
|
|||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
"Radius": function(value) {
|
"Radius": function(value) {
|
||||||
return node = this.createElementNSPlus("sld:Radius", {
|
return this.createElementNSPlus("sld:Radius", {
|
||||||
value: value
|
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) {
|
"PolygonSymbolizer": function(symbolizer) {
|
||||||
var node = this.createElementNSPlus("sld:PolygonSymbolizer");
|
var node = this.createElementNSPlus("sld:PolygonSymbolizer");
|
||||||
if(symbolizer.fillColor != undefined ||
|
if(symbolizer.fillColor != undefined ||
|
||||||
|
|||||||
@@ -407,7 +407,33 @@
|
|||||||
|
|
||||||
t.xml_eq(sld, expect, "rule with spatial filter correctly written");
|
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>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user