From 6411a6c0efd2f232b57bad5ddabbf2c56eda6162 Mon Sep 17 00:00:00 2001 From: Bart van den Eijnden Date: Fri, 24 Feb 2012 14:58:36 +0100 Subject: [PATCH] implement TextSymbolizer->PointPlacement --- lib/OpenLayers/Feature/.Vector.js.swp | Bin 0 -> 16384 bytes lib/OpenLayers/Format/SLD/v1.js | 126 ++++++++++++++++++++++++++ tests/Format/SLD/v1_0_0.html | 13 +++ 3 files changed, 139 insertions(+) create mode 100644 lib/OpenLayers/Feature/.Vector.js.swp diff --git a/lib/OpenLayers/Feature/.Vector.js.swp b/lib/OpenLayers/Feature/.Vector.js.swp new file mode 100644 index 0000000000000000000000000000000000000000..264aae31ffdf200292c7a018095878b91b52334f GIT binary patch literal 16384 zcmeHNO>87b6)t|V5R&kdAR$0Pg;!*3WA}J%SkP=R%-UYouxnfEnJh>fK}~m!yX>Cs zp}TsV*^L)P;*u2-KPMy({N<1XC>KC*iv&4ucy{gwW)mwOU{WATSw?uHglaSr7FKs^chkue6-b_f3rE(N-RdeE{ z+RcwxJRk6Qo{QZW_iTQ^{9cmm%@5PWixQtjnWWxscA_$_(lOu|IEH}-$kO7O1yy-^>Vx#52fN3#bH$DU z$ADwNG2j?*3^)cH1C9a5!0V9#IXp$ajDfw;4DP_(-*D*unz?*ae)CZMe@*?qDS!D; z{eMjTiYfn`>A?2$Z&SZz>c4%c{!OO*L397xp?Xv7ZjJ%RfMdWh;23ZWI0hU8jseGj zW56-s7;p?6!2k;gSw#7HwE=+N|Lyz#kKaK^1Uw9!0`39+@peLP1HS`)27Dj*DzFbo zAOjNM5-$$23!JGfsX8l{a0_@6=mTBgGVlm+4p;)-54`wRj34+4kOM;?1U>`28@M0%`&$V4D{vcl9vA@) z;La&Ro(8S~4*}2LL&$X?12}LE_#|)^m;t7MKjKWrcYtpJw}2;s5NHD*0X__T0C*4Z zD{PoN0n7upVcQphUjsh{eggauxCuN4bOB}mHt_#nR9&-li=}M9CC+iQh$*u7l@up9 zIAwICPjJwFaiGJaWrHNnWSXnv9W7d&{P4`l53e}+p<6d+XDO_RYmfw@FL=e*bqscuRxnyo%e`$@oUXSOzEBVMvwJ+C=el!YSRp^?}tY*#wq)sV-avTkP@vWyN` zz^#KQ8O9-Nn$0N#YmYE0SWS+n!Wyqdmp6O6@O1k~ImRQ0*6t%_5F3TR7OL$F8Pdzj zzsDv7<_f1wv|!_^5l&a>LEDZ@?Onc;QJldV@>GtM&$0;N7{L5GDg)Z%@Bj|SR~!m? zcfeGSdo}l(h#hSo5UE{?ioVv?s@0x|GMM9Vm}E5Rm*HG9g7S6*ft6Et=#?avX%cx8 zBrVU;{ZRO!>L623QfrfvfO2%b@ks$Prvq?56;i^3dSk1Cl4+a;9-@ZH$8?{AzQTNg zM_2MR<*`J3>1m|SypB3Wz7=<)aFheuj;S%8HofY`hK?p@Vl2wOwHQeHR$O~)eajfS zRr0ATF>C6({s;8}p039jnna8SywCDTPT47>oI!7FW5$ek4lv892efpvQ7PiQTERd>C%vu4Dxc*!-OKIRz`}M*b zOBYZvpga%(zAvH({!b;_gJ==MgPD)0k7do~6Rbk(awz&kCdUy!W+0_`bxX{C6QcB! z#S*9&HH^CWmPxFZ$BDEyu_7zF^gKadty2UzvT`m^Qzr1KQgmQ~ey9D-eVVLwd;BzOPB5njyXo!feZ#N-l#0ssEI8Ez(cfrCYf=S zVj*I*p_OVVT?|9Uu``pg@;YJGuGCk|!H#VhCV^z)L9D~Ev-CAwy!tOA@G}tIs zrS*;NwJRMoU5^ne(v)^LKD)7bbpyrScrQ-&V^glCQ#~7I$~$U)v#n-U_|^^5Y|_q^ z_Vz{ExwyVfl;(ZBL{P~emns=iR=}G9j>;0ui(~6vlI}E- zK*xKvv+Pa#w1hyNVXHjG^b!foljy})NsM|YNz!b_qg#0oH6fe_6Bu$rrNm0aSxV1u zuU6_%kVsdO;TSI&p`_FP3|(AUI6J?%aAr|W-_>~0s_KAFXBYuPo{!!&n za11yG90QI4$ADwNG2j?*3^)cH1FusC4$i4pd7}QAABgZN5ZMrK%-C^`lb9F32sQK; zE^pW$f)3{JE^e-f^?0?}k&@Ly_EWV?&4*(2m4Tj7on{ ztLfvt*gkc7L0`36>~3dTpeS~ZYE{Doo5Va_8>wwgNF9kxV9Rccsp6p4Fifz0x}{oo zW1)80KXhc}6&8pbg3g%DcWAA 1/3 && x < 2/3) { + labelAlign = 'c'; + } else if (x >= 2/3) { + labelAlign = 'r'; + } + if (y <= 1/3) { + labelAlign += 'b'; + } else if (y > 1/3 && y < 2/3) { + labelAlign += 'm'; + } else if (x >= 2/3) { + labelAlign += 't'; + } + symbolizer.labelAlign = labelAlign; + }, + "AnchorPoint": function(node, symbolizer) { + this.readChildNodes(node, symbolizer); + }, + "AnchorPointX": function(node, symbolizer) { + var labelAnchorPointX = this.readers.ogc._expression.call(this, node); + // always string, could be empty string + if(labelAnchorPointX) { + symbolizer.labelAnchorPointX = labelAnchorPointX; + } + }, + "AnchorPointY": function(node, symbolizer) { + var labelAnchorPointY = this.readers.ogc._expression.call(this, node); + // always string, could be empty string + if(labelAnchorPointY) { + symbolizer.labelAnchorPointY = labelAnchorPointY; + } + }, + "Displacement": function(node, symbolizer) { + this.readChildNodes(node, symbolizer); + }, + "DisplacementX": function(node, symbolizer) { + var labelXOffset = this.readers.ogc._expression.call(this, node); + // always string, could be empty string + if(labelXOffset) { + symbolizer.labelXOffset = labelXOffset; + } + }, + "DisplacementY": function(node, symbolizer) { + var labelYOffset = this.readers.ogc._expression.call(this, node); + // always string, could be empty string + if(labelYOffset) { + symbolizer.labelYOffset = labelYOffset; + } + }, "Label": function(node, symbolizer) { var value = this.readers.ogc._expression.call(this, node); if (value) { @@ -881,6 +939,11 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { symbolizer.fontStyle != null) { this.writeNode("Font", symbolizer, node); } + // add in optional LabelPlacement + if (symbolizer.labelAnchorPointX != null || + symbolizer.labelAnchorPointY != null) { + this.writeNode("LabelPlacement", symbolizer, node); + } // add in optional Halo if(symbolizer.haloRadius != null || symbolizer.haloColor != null || @@ -894,6 +957,69 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { } return node; }, + "LabelPlacement": function(symbolizer) { + var node = this.createElementNSPlus("sld:LabelPlacement"); + if (symbolizer.labelAnchorPointX != null || + symbolizer.labelAnchorPointY != null) { + this.writeNode("PointPlacement", symbolizer, node); + } + return node; + }, + "PointPlacement": function(symbolizer) { + var node = this.createElementNSPlus("sld:PointPlacement"); + if (symbolizer.labelAnchorPointX != null || + symbolizer.labelAnchorPointY != null) { + this.writeNode("AnchorPoint", symbolizer, node); + } + if (symbolizer.labelXOffset != null || + symbolizer.labelYOffset != null) { + this.writeNode("Displacement", symbolizer, node); + } + if (symbolizer.rotation != null) { + this.writeNode("Rotation", symbolizer.rotation, node); + } + return node; + }, + "AnchorPoint": function(symbolizer) { + var node = this.createElementNSPlus("sld:AnchorPoint"); + if (symbolizer.labelAnchorPointX != null) { + this.writeNode("AnchorPointX", symbolizer.labelAnchorPointX, node); + } + if (symbolizer.labelAnchorPointY != null) { + this.writeNode("AnchorPointY", symbolizer.labelAnchorPointY, node); + } + return node; + }, + "AnchorPointX": function(value) { + return this.createElementNSPlus("sld:AnchorPointX", { + value: value + }); + }, + "AnchorPointY": function(value) { + return this.createElementNSPlus("sld:AnchorPointY", { + value: value + }); + }, + "Displacement": function(symbolizer) { + var node = this.createElementNSPlus("sld:Displacement"); + if (symbolizer.labelXOffset != null) { + this.writeNode("DisplacementX", symbolizer.labelXOffset, node); + } + if (symbolizer.labelYOffset != null) { + this.writeNode("DisplacementY", symbolizer.labelYOffset, node); + } + return node; + }, + "DisplacementX": function(value) { + return this.createElementNSPlus("sld:DisplacementX", { + value: value + }); + }, + "DisplacementY": function(value) { + return this.createElementNSPlus("sld:DisplacementY", { + value: value + }); + }, "Font": function(symbolizer) { var node = this.createElementNSPlus("sld:Font"); // add in CssParameters diff --git a/tests/Format/SLD/v1_0_0.html b/tests/Format/SLD/v1_0_0.html index a31ba6a5f3..37e9e1558a 100644 --- a/tests/Format/SLD/v1_0_0.html +++ b/tests/Format/SLD/v1_0_0.html @@ -47,6 +47,19 @@ 'bold' + 'normal' + '' + + '' + + '' + + '' + + '0.5' + + '0.5' + + '' + + '' + + '5' + + '5' + + '' + + '45' + + '' + + '' + '' + '3' + '' +