From f05564cdb3fcb4b071daf01b7cca26396ebea581 Mon Sep 17 00:00:00 2001 From: Bart van den Eijnden Date: Fri, 24 Feb 2012 15:42:49 +0100 Subject: [PATCH] add support for LinePlacement --- lib/OpenLayers/Format/SLD/v1.js | 28 ++++++++++++++++-- tests/Format/SLD/v1_0_0.html | 51 +++++++++++++++++++++++++++++++-- 2 files changed, 75 insertions(+), 4 deletions(-) diff --git a/lib/OpenLayers/Format/SLD/v1.js b/lib/OpenLayers/Format/SLD/v1.js index ef8dda0ce3..49592aef71 100644 --- a/lib/OpenLayers/Format/SLD/v1.js +++ b/lib/OpenLayers/Format/SLD/v1.js @@ -278,6 +278,16 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { symbolizer.labelYOffset = labelYOffset; } }, + "LinePlacement": function(node, symbolizer) { + this.readChildNodes(node, symbolizer); + }, + "PerpendicularOffset": function(node, symbolizer) { + var labelPerpendicularOffset = this.readers.ogc._expression.call(this, node); + // always string, could be empty string + if(labelPerpendicularOffset) { + symbolizer.labelPerpendicularOffset = labelPerpendicularOffset; + } + }, "Label": function(node, symbolizer) { var value = this.readers.ogc._expression.call(this, node); if (value) { @@ -940,8 +950,9 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { this.writeNode("Font", symbolizer, node); } // add in optional LabelPlacement - if (symbolizer.labelAnchorPointX != null || - symbolizer.labelAnchorPointY != null) { + if ((symbolizer.labelAnchorPointX != null || + symbolizer.labelAnchorPointY != null) || + symbolizer.labelPerpendicularOffset != null) { this.writeNode("LabelPlacement", symbolizer, node); } // add in optional Halo @@ -963,8 +974,21 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { symbolizer.labelAnchorPointY != null) { this.writeNode("PointPlacement", symbolizer, node); } + if (symbolizer.labelPerpendicularOffset != null) { + this.writeNode("LinePlacement", symbolizer, node); + } return node; }, + "LinePlacement": function(symbolizer) { + var node = this.createElementNSPlus("sld:LinePlacement"); + this.writeNode("PerpendicularOffset", symbolizer.labelPerpendicularOffset, node); + return node; + }, + "PerpendicularOffset": function(value) { + return this.createElementNSPlus("sld:PerpendicularOffset", { + value: value + }); + }, "PointPlacement": function(symbolizer) { var node = this.createElementNSPlus("sld:PointPlacement"); if (symbolizer.labelAnchorPointX != null || diff --git a/tests/Format/SLD/v1_0_0.html b/tests/Format/SLD/v1_0_0.html index 37e9e1558a..7b3c50acf2 100644 --- a/tests/Format/SLD/v1_0_0.html +++ b/tests/Format/SLD/v1_0_0.html @@ -522,7 +522,33 @@ t.xml_eq(got, exp, "duplicated rules to write zIndex as FeatureTypeStyle elements"); } - + + function test_label_LinePlacement(t) { + t.plan(1); + var format = new OpenLayers.Format.SLD.v1_0_0({ + multipleSymbolizers: true + }); + var style = new OpenLayers.Style2({ + rules: [ + new OpenLayers.Rule({ + symbolizers: [ + new OpenLayers.Symbolizer.Line({ + strokeColor: "red", + strokeWidth: 3 + }), + new OpenLayers.Symbolizer.Text({ + label: "${FOO}", + labelPerpendicularOffset: 10 + }) + ] + }) + ] + }); + var got = format.writeNode("sld:UserStyle", style); + var exp = readXML("label_lineplacement_test.sld").documentElement; + t.xml_eq(got, exp, "LinePlacement written out correctly"); + } + function test_read_FeatureTypeStyles(t) { t.plan(13); @@ -598,7 +624,6 @@ doc = readXML("polygon_labelhalo.sld"); out = format.write(format.read(doc)); t.xml_eq(out, doc.documentElement, "round-tripped polygon_labelhalo.sld"); - } @@ -880,5 +905,27 @@ --> +