add support for LinePlacement
This commit is contained in:
@@ -278,6 +278,16 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
|
|||||||
symbolizer.labelYOffset = labelYOffset;
|
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) {
|
"Label": function(node, symbolizer) {
|
||||||
var value = this.readers.ogc._expression.call(this, node);
|
var value = this.readers.ogc._expression.call(this, node);
|
||||||
if (value) {
|
if (value) {
|
||||||
@@ -940,8 +950,9 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
|
|||||||
this.writeNode("Font", symbolizer, node);
|
this.writeNode("Font", symbolizer, node);
|
||||||
}
|
}
|
||||||
// add in optional LabelPlacement
|
// add in optional LabelPlacement
|
||||||
if (symbolizer.labelAnchorPointX != null ||
|
if ((symbolizer.labelAnchorPointX != null ||
|
||||||
symbolizer.labelAnchorPointY != null) {
|
symbolizer.labelAnchorPointY != null) ||
|
||||||
|
symbolizer.labelPerpendicularOffset != null) {
|
||||||
this.writeNode("LabelPlacement", symbolizer, node);
|
this.writeNode("LabelPlacement", symbolizer, node);
|
||||||
}
|
}
|
||||||
// add in optional Halo
|
// add in optional Halo
|
||||||
@@ -963,8 +974,21 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
|
|||||||
symbolizer.labelAnchorPointY != null) {
|
symbolizer.labelAnchorPointY != null) {
|
||||||
this.writeNode("PointPlacement", symbolizer, node);
|
this.writeNode("PointPlacement", symbolizer, node);
|
||||||
}
|
}
|
||||||
|
if (symbolizer.labelPerpendicularOffset != null) {
|
||||||
|
this.writeNode("LinePlacement", symbolizer, node);
|
||||||
|
}
|
||||||
return 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) {
|
"PointPlacement": function(symbolizer) {
|
||||||
var node = this.createElementNSPlus("sld:PointPlacement");
|
var node = this.createElementNSPlus("sld:PointPlacement");
|
||||||
if (symbolizer.labelAnchorPointX != null ||
|
if (symbolizer.labelAnchorPointX != null ||
|
||||||
|
|||||||
@@ -522,7 +522,33 @@
|
|||||||
t.xml_eq(got, exp, "duplicated rules to write zIndex as FeatureTypeStyle elements");
|
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) {
|
function test_read_FeatureTypeStyles(t) {
|
||||||
|
|
||||||
t.plan(13);
|
t.plan(13);
|
||||||
@@ -598,7 +624,6 @@
|
|||||||
doc = readXML("polygon_labelhalo.sld");
|
doc = readXML("polygon_labelhalo.sld");
|
||||||
out = format.write(format.read(doc));
|
out = format.write(format.read(doc));
|
||||||
t.xml_eq(out, doc.documentElement, "round-tripped polygon_labelhalo.sld");
|
t.xml_eq(out, doc.documentElement, "round-tripped polygon_labelhalo.sld");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@@ -880,5 +905,27 @@
|
|||||||
</sld:FeatureTypeStyle>
|
</sld:FeatureTypeStyle>
|
||||||
</sld:UserStyle>
|
</sld:UserStyle>
|
||||||
--></div>
|
--></div>
|
||||||
|
<div id="label_lineplacement_test.sld"><!--
|
||||||
|
<sld:UserStyle xmlns:sld="http://www.opengis.net/sld">
|
||||||
|
<sld:FeatureTypeStyle>
|
||||||
|
<sld:Rule>
|
||||||
|
<sld:LineSymbolizer>
|
||||||
|
<sld:Stroke>
|
||||||
|
<sld:CssParameter name="stroke">red</sld:CssParameter>
|
||||||
|
<sld:CssParameter name="stroke-width">3</sld:CssParameter>
|
||||||
|
</sld:Stroke>
|
||||||
|
</sld:LineSymbolizer>
|
||||||
|
<sld:TextSymbolizer>
|
||||||
|
<sld:Label><ogc:PropertyName xmlns:ogc="http://www.opengis.net/ogc">FOO</ogc:PropertyName></sld:Label>
|
||||||
|
<sld:LabelPlacement>
|
||||||
|
<sld:LinePlacement>
|
||||||
|
<sld:PerpendicularOffset>10</sld:PerpendicularOffset>
|
||||||
|
</sld:LinePlacement>
|
||||||
|
</sld:LabelPlacement>
|
||||||
|
</sld:TextSymbolizer>
|
||||||
|
</sld:Rule>
|
||||||
|
</sld:FeatureTypeStyle>
|
||||||
|
</sld:UserStyle>
|
||||||
|
--></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user