Adding more support for sld:TextSymbolizer parsing. Reading TextSymbolizer, Label, Font, Halo, and Radius. Writing symbolizer fontWeight and fontStyle as sld:CssParameters. Writing sld:Halo and sld:Radius. r=ahocevar (closes #1984)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@9064 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2009-03-17 00:14:26 +00:00
parent 291d2e27f6
commit 7af042ac7f
2 changed files with 131 additions and 4 deletions

View File

@@ -159,6 +159,44 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
"MaxScaleDenominator": function(node, rule) {
rule.maxScaleDenominator = parseFloat(this.getChildValue(node));
},
"TextSymbolizer": function(node, rule) {
// OpenLayers doens't do painter's order, instead we extend
var symbolizer = rule.symbolizer["Text"] || {};
this.readChildNodes(node, symbolizer);
// in case it didn't exist before
rule.symbolizer["Text"] = symbolizer;
},
"Label": function(node, symbolizer) {
// only supporting literal or property name
var obj = {};
this.readChildNodes(node, obj);
if(obj.property) {
symbolizer.label = "${" + obj.property + "}";
} else {
var value = this.readOgcExpression(node);
if(value) {
symbolizer.label = value;
}
}
},
"Font": function(node, symbolizer) {
this.readChildNodes(node, symbolizer);
},
"Halo": function(node, symbolizer) {
// halo has a fill, so send fresh object
var obj = {};
this.readChildNodes(node, obj);
symbolizer.haloRadius = obj.haloRadius;
symbolizer.haloColor = obj.fillColor;
symbolizer.haloOpacity = obj.fillOpacity;
},
"Radius": function(node, symbolizer) {
var radius = this.readOgcExpression(node);
if(radius != null) {
// radius is only used for halo
symbolizer.haloRadius = radius;
}
},
"LineSymbolizer": function(node, rule) {
// OpenLayers doesn't do painter's order, instead we extend
var symbolizer = rule.symbolizer["Line"] || {};
@@ -285,7 +323,9 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
"fill": "fillColor",
"fill-opacity": "fillOpacity",
"font-family": "fontFamily",
"font-size": "fontSize"
"font-size": "fontSize",
"font-weight": "fontWeight",
"font-style": "fontStyle"
},
/**
@@ -603,9 +643,17 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
}
// add in optional Font
if(symbolizer.fontFamily != null ||
symbolizer.fontSize != null) {
symbolizer.fontSize != null ||
symbolizer.fontWeight != null ||
symbolizer.fontStyle != null) {
this.writeNode("Font", symbolizer, node);
}
// add in optional Halo
if(symbolizer.haloRadius != null ||
symbolizer.haloColor != null ||
symbolizer.haloOpacity != null) {
this.writeNode("Halo", symbolizer, node);
}
// add in optional Fill
if(symbolizer.fillColor != null ||
symbolizer.fillOpacity != null) {
@@ -630,6 +678,20 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
node
);
}
if(symbolizer.fontWeight) {
this.writeNode(
"CssParameter",
{symbolizer: symbolizer, key: "fontWeight"},
node
);
}
if(symbolizer.fontStyle) {
this.writeNode(
"CssParameter",
{symbolizer: symbolizer, key: "fontStyle"},
node
);
}
return node;
},
"Label": function(label) {
@@ -660,6 +722,24 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
}
return node;
},
"Halo": function(symbolizer) {
var node = this.createElementNSPlus("Halo");
if(symbolizer.haloRadius) {
this.writeNode("Radius", symbolizer.haloRadius, node);
}
if(symbolizer.haloColor || symbolizer.haloOpacity) {
this.writeNode("Fill", {
fillColor: symbolizer.haloColor,
fillOpacity: symbolizer.haloOpacity
}, node);
}
return node;
},
"Radius": function(value) {
return node = this.createElementNSPlus("Radius", {
value: value
});
},
"PolygonSymbolizer": function(symbolizer) {
var node = this.createElementNSPlus("PolygonSymbolizer");
if(symbolizer.fillColor != undefined ||