Mercurial > gemma
comparison pkg/geoserver/templates_test.go @ 3826:4b1184fa0326 sld-colors
Added templating and a failing test.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 03 Jul 2019 17:47:17 +0200 |
parents | |
children | 885eb90255ff |
comparison
equal
deleted
inserted
replaced
3825:36129677ff24 | 3826:4b1184fa0326 |
---|---|
1 // This is Free Software under GNU Affero General Public License v >= 3.0 | |
2 // without warranty, see README.md and license for details. | |
3 // | |
4 // SPDX-License-Identifier: AGPL-3.0-or-later | |
5 // License-Filename: LICENSES/AGPL-3.0.txt | |
6 // | |
7 // Copyright (C) 2018 by via donau | |
8 // – Österreichische Wasserstraßen-Gesellschaft mbH | |
9 // Software engineering by Intevation GmbH | |
10 // | |
11 // Author(s): | |
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> | |
13 | |
14 package geoserver | |
15 | |
16 import ( | |
17 "fmt" | |
18 "strings" | |
19 "testing" | |
20 "text/template" | |
21 | |
22 "github.com/sergi/go-diff/diffmatchpatch" | |
23 ) | |
24 | |
25 const sldTmplTxt = `<?xml version="1.0" encoding="UTF-8"?> | |
26 <StyledLayerDescriptor | |
27 xmlns="http://www.opengis.net/sld" | |
28 xmlns:se="http://www.opengis.net/se" | |
29 xmlns:ogc="http://www.opengis.net/ogc" | |
30 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
31 xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" | |
32 version="1.1.0"> | |
33 <NamedLayer> | |
34 <se:Name>sounding_results_contour_lines</se:Name> | |
35 <UserStyle> | |
36 <se:Name>sounding_results_contour_lines</se:Name> | |
37 <se:FeatureTypeStyle> | |
38 <se:Name>contour_line_colours</se:Name> | |
39 <se:Description> | |
40 <se:Abstract> | |
41 FeatureTypeStyle defining colour classes for height attribute | |
42 </se:Abstract> | |
43 </se:Description> | |
44 {{ range . -}} | |
45 {{- if and .HasLow .HasHigh -}} | |
46 <se:Rule> | |
47 <se:Name>≤ {{ printf "%.1f" .High }}</se:Name> | |
48 <ogc:Filter> | |
49 <ogc:And> | |
50 <ogc:PropertyIsGreaterThan> | |
51 <ogc:PropertyName>height</ogc:PropertyName> | |
52 <ogc:Literal>{{.Low}}</ogc:Literal> | |
53 </ogc:PropertyIsGreaterThan> | |
54 <ogc:PropertyIsLessThanOrEqualTo> | |
55 <ogc:PropertyName>height</ogc:PropertyName> | |
56 <ogc:Literal>{{ printf "%g" .High }}</ogc:Literal> | |
57 </ogc:PropertyIsLessThanOrEqualTo> | |
58 </ogc:And> | |
59 </ogc:Filter> | |
60 <se:LineSymbolizer> | |
61 <se:Stroke> | |
62 <se:SvgParameter name="stroke">{{.Color}}</se:SvgParameter> | |
63 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
64 </se:Stroke> | |
65 </se:LineSymbolizer> | |
66 </se:Rule> | |
67 {{ else if .HasLow -}} | |
68 <se:Rule> | |
69 <se:Name>> {{ printf "%.1f" .Low }}</se:Name> | |
70 <ogc:Filter> | |
71 <ogc:PropertyIsGreaterThan> | |
72 <ogc:PropertyName>height</ogc:PropertyName> | |
73 <ogc:Literal>{{ printf "%g" .Low }}</ogc:Literal> | |
74 </ogc:PropertyIsGreaterThan> | |
75 </ogc:Filter> | |
76 <se:LineSymbolizer> | |
77 <se:Stroke> | |
78 <se:SvgParameter name="stroke">{{.Color}}</se:SvgParameter> | |
79 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
80 </se:Stroke> | |
81 </se:LineSymbolizer> | |
82 </se:Rule> | |
83 {{ else if .HasHigh -}} | |
84 <se:Rule> | |
85 <se:Name>≤ {{ printf "%.1f" .High }}</se:Name> | |
86 <ogc:Filter> | |
87 <ogc:PropertyIsLessThanOrEqualTo> | |
88 <ogc:PropertyName>height</ogc:PropertyName> | |
89 <ogc:Literal>{{ printf "%g" .High }}</ogc:Literal> | |
90 </ogc:PropertyIsLessThanOrEqualTo> | |
91 </ogc:Filter> | |
92 <se:LineSymbolizer> | |
93 <se:Stroke> | |
94 <se:SvgParameter name="stroke">{{.Color}}</se:SvgParameter> | |
95 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
96 </se:Stroke> | |
97 </se:LineSymbolizer> | |
98 </se:Rule> | |
99 {{ end -}} | |
100 {{ end }} | |
101 </se:FeatureTypeStyle> | |
102 <se:FeatureTypeStyle> | |
103 <se:Name>contour_lines_emph</se:Name> | |
104 <se:Description> | |
105 <se:Abstract> | |
106 FeatureTypeStyle for emphasized contour lines | |
107 </se:Abstract> | |
108 </se:Description> | |
109 <se:Rule> | |
110 <se:LegendGraphic> | |
111 <se:Graphic> | |
112 </se:Graphic> | |
113 </se:LegendGraphic> | |
114 <ogc:Filter> | |
115 <ogc:Or> | |
116 {{- range . }} | |
117 {{if .HasHigh -}} | |
118 <ogc:PropertyIsEqualTo> | |
119 <ogc:Function name="numberFormat"> | |
120 <ogc:Literal>0.0</ogc:Literal> | |
121 <ogc:PropertyName>height</ogc:PropertyName> | |
122 </ogc:Function> | |
123 <ogc:Literal>{{ printf "%.1f" .High }}</ogc:Literal> | |
124 </ogc:PropertyIsEqualTo> | |
125 {{- end -}} | |
126 {{end }} | |
127 </ogc:Or> | |
128 </ogc:Filter> | |
129 <se:MaxScaleDenominator>5e3</se:MaxScaleDenominator> | |
130 <se:LineSymbolizer> | |
131 <se:Stroke> | |
132 <se:SvgParameter name="stroke-width">1.5</se:SvgParameter> | |
133 <se:SvgParameter name="stroke"> | |
134 <ogc:Function name="Recode"> | |
135 <ogc:Function name="numberFormat"> | |
136 <ogc:Literal>0.0</ogc:Literal> | |
137 <ogc:PropertyName>height</ogc:PropertyName> | |
138 </ogc:Function> | |
139 {{- range .}} | |
140 {{if .HasHigh -}} | |
141 <ogc:Literal>{{ printf "%.1f" .High }}</ogc:Literal> | |
142 <ogc:Literal>{{.Color}}</ogc:Literal> | |
143 {{- end -}} | |
144 {{end}} | |
145 </ogc:Function> | |
146 </se:SvgParameter> | |
147 </se:Stroke> | |
148 </se:LineSymbolizer> | |
149 </se:Rule> | |
150 </se:FeatureTypeStyle> | |
151 <se:FeatureTypeStyle> | |
152 <se:Name>contour_lines_label</se:Name> | |
153 <se:Description> | |
154 <se:Abstract> | |
155 FeatureTypeStyle for labels at contour lines | |
156 </se:Abstract> | |
157 </se:Description> | |
158 <se:Rule> | |
159 <se:MaxScaleDenominator>5e3</se:MaxScaleDenominator> | |
160 <se:TextSymbolizer> | |
161 <se:Label> | |
162 <ogc:Function name="Recode"> | |
163 <ogc:Function name="numberFormat"> | |
164 <ogc:Literal>0.0</ogc:Literal> | |
165 <ogc:PropertyName>height</ogc:PropertyName> | |
166 </ogc:Function> | |
167 {{- range . }} | |
168 {{ if .HasHigh -}} | |
169 <ogc:Literal>{{ printf "%.1f" .High}}</ogc:Literal><ogc:Literal>{{ printf "%.1f" .High}}</ogc:Literal> | |
170 {{- else if .HasLow -}} | |
171 <ogc:Literal>{{ printf "%.1f" .Low}}</ogc:Literal><ogc:Literal>{{ printf "%.1f" .Low}}</ogc:Literal> | |
172 {{- end }} | |
173 {{- end }} | |
174 </ogc:Function> | |
175 </se:Label> | |
176 <se:LabelPlacement> | |
177 <se:LinePlacement> | |
178 <se:PerpendicularOffset>5</se:PerpendicularOffset> | |
179 </se:LinePlacement> | |
180 </se:LabelPlacement> | |
181 <se:Font> | |
182 <se:SvgParameter name="font-family">Avenir</se:SvgParameter> | |
183 <se:SvgParameter name="font-family">Helvetica</se:SvgParameter> | |
184 <se:SvgParameter name="font-family">Arial</se:SvgParameter> | |
185 <se:SvgParameter name="font-family">sans-serif</se:SvgParameter> | |
186 </se:Font> | |
187 <se:Fill> | |
188 <se:SvgParameter name="fill">#070707</se:SvgParameter> | |
189 </se:Fill> | |
190 </se:TextSymbolizer> | |
191 </se:Rule> | |
192 </se:FeatureTypeStyle> | |
193 </UserStyle> | |
194 </NamedLayer> | |
195 </StyledLayerDescriptor> | |
196 ` | |
197 | |
198 const origSLD = ` | |
199 <?xml version="1.0" encoding="UTF-8"?> | |
200 <StyledLayerDescriptor | |
201 xmlns="http://www.opengis.net/sld" | |
202 xmlns:se="http://www.opengis.net/se" | |
203 xmlns:ogc="http://www.opengis.net/ogc" | |
204 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
205 xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" | |
206 version="1.1.0"> | |
207 <NamedLayer> | |
208 <se:Name>sounding_results_contour_lines</se:Name> | |
209 <UserStyle> | |
210 <se:Name>sounding_results_contour_lines</se:Name> | |
211 <se:FeatureTypeStyle> | |
212 <se:Name>contour_line_colours</se:Name> | |
213 <se:Description> | |
214 <se:Abstract> | |
215 FeatureTypeStyle defining colour classes for height attribute | |
216 </se:Abstract> | |
217 </se:Description> | |
218 <se:Rule> | |
219 <se:Name>≤ 1.0</se:Name> | |
220 <ogc:Filter> | |
221 <ogc:PropertyIsLessThanOrEqualTo> | |
222 <ogc:PropertyName>height</ogc:PropertyName> | |
223 <ogc:Literal>1</ogc:Literal> | |
224 </ogc:PropertyIsLessThanOrEqualTo> | |
225 </ogc:Filter> | |
226 <se:LineSymbolizer> | |
227 <se:Stroke> | |
228 <se:SvgParameter name="stroke">#ff00dd</se:SvgParameter> | |
229 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
230 </se:Stroke> | |
231 </se:LineSymbolizer> | |
232 </se:Rule> | |
233 <se:Rule> | |
234 <se:Name>≤ 1.5</se:Name> | |
235 <ogc:Filter> | |
236 <ogc:And> | |
237 <ogc:PropertyIsGreaterThan> | |
238 <ogc:PropertyName>height</ogc:PropertyName> | |
239 <ogc:Literal>1</ogc:Literal> | |
240 </ogc:PropertyIsGreaterThan> | |
241 <ogc:PropertyIsLessThanOrEqualTo> | |
242 <ogc:PropertyName>height</ogc:PropertyName> | |
243 <ogc:Literal>1.5</ogc:Literal> | |
244 </ogc:PropertyIsLessThanOrEqualTo> | |
245 </ogc:And> | |
246 </ogc:Filter> | |
247 <se:LineSymbolizer> | |
248 <se:Stroke> | |
249 <se:SvgParameter name="stroke">#fb08b6</se:SvgParameter> | |
250 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
251 </se:Stroke> | |
252 </se:LineSymbolizer> | |
253 </se:Rule> | |
254 <se:Rule> | |
255 <se:Name>≤ 1.7</se:Name> | |
256 <ogc:Filter> | |
257 <ogc:And> | |
258 <ogc:PropertyIsGreaterThan> | |
259 <ogc:PropertyName>height</ogc:PropertyName> | |
260 <ogc:Literal>1.5</ogc:Literal> | |
261 </ogc:PropertyIsGreaterThan> | |
262 <ogc:PropertyIsLessThanOrEqualTo> | |
263 <ogc:PropertyName>height</ogc:PropertyName> | |
264 <ogc:Literal>1.7</ogc:Literal> | |
265 </ogc:PropertyIsLessThanOrEqualTo> | |
266 </ogc:And> | |
267 </ogc:Filter> | |
268 <se:LineSymbolizer> | |
269 <se:Stroke> | |
270 <se:SvgParameter name="stroke">#f81090</se:SvgParameter> | |
271 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
272 </se:Stroke> | |
273 </se:LineSymbolizer> | |
274 </se:Rule> | |
275 <se:Rule> | |
276 <se:Name>≤ 1.9</se:Name> | |
277 <ogc:Filter> | |
278 <ogc:And> | |
279 <ogc:PropertyIsGreaterThan> | |
280 <ogc:PropertyName>height</ogc:PropertyName> | |
281 <ogc:Literal>1.7</ogc:Literal> | |
282 </ogc:PropertyIsGreaterThan> | |
283 <ogc:PropertyIsLessThanOrEqualTo> | |
284 <ogc:PropertyName>height</ogc:PropertyName> | |
285 <ogc:Literal>1.9</ogc:Literal> | |
286 </ogc:PropertyIsLessThanOrEqualTo> | |
287 </ogc:And> | |
288 </ogc:Filter> | |
289 <se:LineSymbolizer> | |
290 <se:Stroke> | |
291 <se:SvgParameter name="stroke">#f5196a</se:SvgParameter> | |
292 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
293 </se:Stroke> | |
294 </se:LineSymbolizer> | |
295 </se:Rule> | |
296 <se:Rule> | |
297 <se:Name>≤ 2.1</se:Name> | |
298 <ogc:Filter> | |
299 <ogc:And> | |
300 <ogc:PropertyIsGreaterThan> | |
301 <ogc:PropertyName>height</ogc:PropertyName> | |
302 <ogc:Literal>1.9</ogc:Literal> | |
303 </ogc:PropertyIsGreaterThan> | |
304 <ogc:PropertyIsLessThanOrEqualTo> | |
305 <ogc:PropertyName>height</ogc:PropertyName> | |
306 <ogc:Literal>2.1</ogc:Literal> | |
307 </ogc:PropertyIsLessThanOrEqualTo> | |
308 </ogc:And> | |
309 </ogc:Filter> | |
310 <se:LineSymbolizer> | |
311 <se:Stroke> | |
312 <se:SvgParameter name="stroke">#f22144</se:SvgParameter> | |
313 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
314 </se:Stroke> | |
315 </se:LineSymbolizer> | |
316 </se:Rule> | |
317 <se:Rule> | |
318 <se:Name>≤ 2.3</se:Name> | |
319 <ogc:Filter> | |
320 <ogc:And> | |
321 <ogc:PropertyIsGreaterThan> | |
322 <ogc:PropertyName>height</ogc:PropertyName> | |
323 <ogc:Literal>2.1</ogc:Literal> | |
324 </ogc:PropertyIsGreaterThan> | |
325 <ogc:PropertyIsLessThanOrEqualTo> | |
326 <ogc:PropertyName>height</ogc:PropertyName> | |
327 <ogc:Literal>2.3</ogc:Literal> | |
328 </ogc:PropertyIsLessThanOrEqualTo> | |
329 </ogc:And> | |
330 </ogc:Filter> | |
331 <se:LineSymbolizer> | |
332 <se:Stroke> | |
333 <se:SvgParameter name="stroke">#f03326</se:SvgParameter> | |
334 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
335 </se:Stroke> | |
336 </se:LineSymbolizer> | |
337 </se:Rule> | |
338 <se:Rule> | |
339 <se:Name>≤ 2.5</se:Name> | |
340 <ogc:Filter> | |
341 <ogc:And> | |
342 <ogc:PropertyIsGreaterThan> | |
343 <ogc:PropertyName>height</ogc:PropertyName> | |
344 <ogc:Literal>2.3</ogc:Literal> | |
345 </ogc:PropertyIsGreaterThan> | |
346 <ogc:PropertyIsLessThanOrEqualTo> | |
347 <ogc:PropertyName>height</ogc:PropertyName> | |
348 <ogc:Literal>2.5</ogc:Literal> | |
349 </ogc:PropertyIsLessThanOrEqualTo> | |
350 </ogc:And> | |
351 </ogc:Filter> | |
352 <se:LineSymbolizer> | |
353 <se:Stroke> | |
354 <se:SvgParameter name="stroke">#f25f20</se:SvgParameter> | |
355 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
356 </se:Stroke> | |
357 </se:LineSymbolizer> | |
358 </se:Rule> | |
359 <se:Rule> | |
360 <se:Name>≤ 2.7</se:Name> | |
361 <ogc:Filter> | |
362 <ogc:And> | |
363 <ogc:PropertyIsGreaterThan> | |
364 <ogc:PropertyName>height</ogc:PropertyName> | |
365 <ogc:Literal>2.5</ogc:Literal> | |
366 </ogc:PropertyIsGreaterThan> | |
367 <ogc:PropertyIsLessThanOrEqualTo> | |
368 <ogc:PropertyName>height</ogc:PropertyName> | |
369 <ogc:Literal>2.7</ogc:Literal> | |
370 </ogc:PropertyIsLessThanOrEqualTo> | |
371 </ogc:And> | |
372 </ogc:Filter> | |
373 <se:LineSymbolizer> | |
374 <se:Stroke> | |
375 <se:SvgParameter name="stroke">#f38b1a</se:SvgParameter> | |
376 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
377 </se:Stroke> | |
378 </se:LineSymbolizer> | |
379 </se:Rule> | |
380 <se:Rule> | |
381 <se:Name>≤ 2.9</se:Name> | |
382 <ogc:Filter> | |
383 <ogc:And> | |
384 <ogc:PropertyIsGreaterThan> | |
385 <ogc:PropertyName>height</ogc:PropertyName> | |
386 <ogc:Literal>2.7</ogc:Literal> | |
387 </ogc:PropertyIsGreaterThan> | |
388 <ogc:PropertyIsLessThanOrEqualTo> | |
389 <ogc:PropertyName>height</ogc:PropertyName> | |
390 <ogc:Literal>2.9</ogc:Literal> | |
391 </ogc:PropertyIsLessThanOrEqualTo> | |
392 </ogc:And> | |
393 </ogc:Filter> | |
394 <se:LineSymbolizer> | |
395 <se:Stroke> | |
396 <se:SvgParameter name="stroke">#f5b814</se:SvgParameter> | |
397 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
398 </se:Stroke> | |
399 </se:LineSymbolizer> | |
400 </se:Rule> | |
401 <se:Rule> | |
402 <se:Name>≤ 3.1</se:Name> | |
403 <ogc:Filter> | |
404 <ogc:And> | |
405 <ogc:PropertyIsGreaterThan> | |
406 <ogc:PropertyName>height</ogc:PropertyName> | |
407 <ogc:Literal>2.9</ogc:Literal> | |
408 </ogc:PropertyIsGreaterThan> | |
409 <ogc:PropertyIsLessThanOrEqualTo> | |
410 <ogc:PropertyName>height</ogc:PropertyName> | |
411 <ogc:Literal>3.1</ogc:Literal> | |
412 </ogc:PropertyIsLessThanOrEqualTo> | |
413 </ogc:And> | |
414 </ogc:Filter> | |
415 <se:LineSymbolizer> | |
416 <se:Stroke> | |
417 <se:SvgParameter name="stroke">#f7e40e</se:SvgParameter> | |
418 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
419 </se:Stroke> | |
420 </se:LineSymbolizer> | |
421 </se:Rule> | |
422 <se:Rule> | |
423 <se:Name>≤ 3.3</se:Name> | |
424 <ogc:Filter> | |
425 <ogc:And> | |
426 <ogc:PropertyIsGreaterThan> | |
427 <ogc:PropertyName>height</ogc:PropertyName> | |
428 <ogc:Literal>3.1</ogc:Literal> | |
429 </ogc:PropertyIsGreaterThan> | |
430 <ogc:PropertyIsLessThanOrEqualTo> | |
431 <ogc:PropertyName>height</ogc:PropertyName> | |
432 <ogc:Literal>3.3</ogc:Literal> | |
433 </ogc:PropertyIsLessThanOrEqualTo> | |
434 </ogc:And> | |
435 </ogc:Filter> | |
436 <se:LineSymbolizer> | |
437 <se:Stroke> | |
438 <se:SvgParameter name="stroke">#e2f30e</se:SvgParameter> | |
439 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
440 </se:Stroke> | |
441 </se:LineSymbolizer> | |
442 </se:Rule> | |
443 <se:Rule> | |
444 <se:Name>≤ 3.5</se:Name> | |
445 <ogc:Filter> | |
446 <ogc:And> | |
447 <ogc:PropertyIsGreaterThan> | |
448 <ogc:PropertyName>height</ogc:PropertyName> | |
449 <ogc:Literal>3.3</ogc:Literal> | |
450 </ogc:PropertyIsGreaterThan> | |
451 <ogc:PropertyIsLessThanOrEqualTo> | |
452 <ogc:PropertyName>height</ogc:PropertyName> | |
453 <ogc:Literal>3.5</ogc:Literal> | |
454 </ogc:PropertyIsLessThanOrEqualTo> | |
455 </ogc:And> | |
456 </ogc:Filter> | |
457 <se:LineSymbolizer> | |
458 <se:Stroke> | |
459 <se:SvgParameter name="stroke">#b6e414</se:SvgParameter> | |
460 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
461 </se:Stroke> | |
462 </se:LineSymbolizer> | |
463 </se:Rule> | |
464 <se:Rule> | |
465 <se:Name>≤ 4.0</se:Name> | |
466 <ogc:Filter> | |
467 <ogc:And> | |
468 <ogc:PropertyIsGreaterThan> | |
469 <ogc:PropertyName>height</ogc:PropertyName> | |
470 <ogc:Literal>3.5</ogc:Literal> | |
471 </ogc:PropertyIsGreaterThan> | |
472 <ogc:PropertyIsLessThanOrEqualTo> | |
473 <ogc:PropertyName>height</ogc:PropertyName> | |
474 <ogc:Literal>4</ogc:Literal> | |
475 </ogc:PropertyIsLessThanOrEqualTo> | |
476 </ogc:And> | |
477 </ogc:Filter> | |
478 <se:LineSymbolizer> | |
479 <se:Stroke> | |
480 <se:SvgParameter name="stroke">#8ad51a</se:SvgParameter> | |
481 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
482 </se:Stroke> | |
483 </se:LineSymbolizer> | |
484 </se:Rule> | |
485 <se:Rule> | |
486 <se:Name>≤ 4.5</se:Name> | |
487 <ogc:Filter> | |
488 <ogc:And> | |
489 <ogc:PropertyIsGreaterThan> | |
490 <ogc:PropertyName>height</ogc:PropertyName> | |
491 <ogc:Literal>4</ogc:Literal> | |
492 </ogc:PropertyIsGreaterThan> | |
493 <ogc:PropertyIsLessThanOrEqualTo> | |
494 <ogc:PropertyName>height</ogc:PropertyName> | |
495 <ogc:Literal>4.5</ogc:Literal> | |
496 </ogc:PropertyIsLessThanOrEqualTo> | |
497 </ogc:And> | |
498 </ogc:Filter> | |
499 <se:LineSymbolizer> | |
500 <se:Stroke> | |
501 <se:SvgParameter name="stroke">#5ec620</se:SvgParameter> | |
502 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
503 </se:Stroke> | |
504 </se:LineSymbolizer> | |
505 </se:Rule> | |
506 <se:Rule> | |
507 <se:Name>≤ 5.0</se:Name> | |
508 <ogc:Filter> | |
509 <ogc:And> | |
510 <ogc:PropertyIsGreaterThan> | |
511 <ogc:PropertyName>height</ogc:PropertyName> | |
512 <ogc:Literal>4.5</ogc:Literal> | |
513 </ogc:PropertyIsGreaterThan> | |
514 <ogc:PropertyIsLessThanOrEqualTo> | |
515 <ogc:PropertyName>height</ogc:PropertyName> | |
516 <ogc:Literal>5</ogc:Literal> | |
517 </ogc:PropertyIsLessThanOrEqualTo> | |
518 </ogc:And> | |
519 </ogc:Filter> | |
520 <se:LineSymbolizer> | |
521 <se:Stroke> | |
522 <se:SvgParameter name="stroke">#32b726</se:SvgParameter> | |
523 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
524 </se:Stroke> | |
525 </se:LineSymbolizer> | |
526 </se:Rule> | |
527 <se:Rule> | |
528 <se:Name>≤ 5.5</se:Name> | |
529 <ogc:Filter> | |
530 <ogc:And> | |
531 <ogc:PropertyIsGreaterThan> | |
532 <ogc:PropertyName>height</ogc:PropertyName> | |
533 <ogc:Literal>5</ogc:Literal> | |
534 </ogc:PropertyIsGreaterThan> | |
535 <ogc:PropertyIsLessThanOrEqualTo> | |
536 <ogc:PropertyName>height</ogc:PropertyName> | |
537 <ogc:Literal>5.5</ogc:Literal> | |
538 </ogc:PropertyIsLessThanOrEqualTo> | |
539 </ogc:And> | |
540 </ogc:Filter> | |
541 <se:LineSymbolizer> | |
542 <se:Stroke> | |
543 <se:SvgParameter name="stroke">#249a49</se:SvgParameter> | |
544 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
545 </se:Stroke> | |
546 </se:LineSymbolizer> | |
547 </se:Rule> | |
548 <se:Rule> | |
549 <se:Name>≤ 6.0</se:Name> | |
550 <ogc:Filter> | |
551 <ogc:And> | |
552 <ogc:PropertyIsGreaterThan> | |
553 <ogc:PropertyName>height</ogc:PropertyName> | |
554 <ogc:Literal>5.5</ogc:Literal> | |
555 </ogc:PropertyIsGreaterThan> | |
556 <ogc:PropertyIsLessThanOrEqualTo> | |
557 <ogc:PropertyName>height</ogc:PropertyName> | |
558 <ogc:Literal>6</ogc:Literal> | |
559 </ogc:PropertyIsLessThanOrEqualTo> | |
560 </ogc:And> | |
561 </ogc:Filter> | |
562 <se:LineSymbolizer> | |
563 <se:Stroke> | |
564 <se:SvgParameter name="stroke">#207977</se:SvgParameter> | |
565 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
566 </se:Stroke> | |
567 </se:LineSymbolizer> | |
568 </se:Rule> | |
569 <se:Rule> | |
570 <se:Name>≤ 6.5</se:Name> | |
571 <ogc:Filter> | |
572 <ogc:And> | |
573 <ogc:PropertyIsGreaterThan> | |
574 <ogc:PropertyName>height</ogc:PropertyName> | |
575 <ogc:Literal>6</ogc:Literal> | |
576 </ogc:PropertyIsGreaterThan> | |
577 <ogc:PropertyIsLessThanOrEqualTo> | |
578 <ogc:PropertyName>height</ogc:PropertyName> | |
579 <ogc:Literal>6.5</ogc:Literal> | |
580 </ogc:PropertyIsLessThanOrEqualTo> | |
581 </ogc:And> | |
582 </ogc:Filter> | |
583 <se:LineSymbolizer> | |
584 <se:Stroke> | |
585 <se:SvgParameter name="stroke">#1c57a4</se:SvgParameter> | |
586 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
587 </se:Stroke> | |
588 </se:LineSymbolizer> | |
589 </se:Rule> | |
590 <se:Rule> | |
591 <se:Name>≤ 7.0</se:Name> | |
592 <ogc:Filter> | |
593 <ogc:And> | |
594 <ogc:PropertyIsGreaterThan> | |
595 <ogc:PropertyName>height</ogc:PropertyName> | |
596 <ogc:Literal>6.5</ogc:Literal> | |
597 </ogc:PropertyIsGreaterThan> | |
598 <ogc:PropertyIsLessThanOrEqualTo> | |
599 <ogc:PropertyName>height</ogc:PropertyName> | |
600 <ogc:Literal>7</ogc:Literal> | |
601 </ogc:PropertyIsLessThanOrEqualTo> | |
602 </ogc:And> | |
603 </ogc:Filter> | |
604 <se:LineSymbolizer> | |
605 <se:Stroke> | |
606 <se:SvgParameter name="stroke">#1835d1</se:SvgParameter> | |
607 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
608 </se:Stroke> | |
609 </se:LineSymbolizer> | |
610 </se:Rule> | |
611 <se:Rule> | |
612 <se:Name>> 7.0</se:Name> | |
613 <ogc:Filter> | |
614 <ogc:PropertyIsGreaterThan> | |
615 <ogc:PropertyName>height</ogc:PropertyName> | |
616 <ogc:Literal>7</ogc:Literal> | |
617 </ogc:PropertyIsGreaterThan> | |
618 </ogc:Filter> | |
619 <se:LineSymbolizer> | |
620 <se:Stroke> | |
621 <se:SvgParameter name="stroke">#1414ff</se:SvgParameter> | |
622 <se:SvgParameter name="stroke-width">0.5</se:SvgParameter> | |
623 </se:Stroke> | |
624 </se:LineSymbolizer> | |
625 </se:Rule> | |
626 </se:FeatureTypeStyle> | |
627 <se:FeatureTypeStyle> | |
628 <se:Name>contour_lines_emph</se:Name> | |
629 <se:Description> | |
630 <se:Abstract> | |
631 FeatureTypeStyle for emphasized contour lines | |
632 </se:Abstract> | |
633 </se:Description> | |
634 <se:Rule> | |
635 <se:LegendGraphic> | |
636 <se:Graphic> | |
637 </se:Graphic> | |
638 </se:LegendGraphic> | |
639 <ogc:Filter> | |
640 <ogc:Or> | |
641 <ogc:PropertyIsEqualTo> | |
642 <ogc:Function name="numberFormat"> | |
643 <ogc:Literal>0.0</ogc:Literal> | |
644 <ogc:PropertyName>height</ogc:PropertyName> | |
645 </ogc:Function> | |
646 <ogc:Literal>1.0</ogc:Literal> | |
647 </ogc:PropertyIsEqualTo> | |
648 <ogc:PropertyIsEqualTo> | |
649 <ogc:Function name="numberFormat"> | |
650 <ogc:Literal>0.0</ogc:Literal> | |
651 <ogc:PropertyName>height</ogc:PropertyName> | |
652 </ogc:Function> | |
653 <ogc:Literal>1.5</ogc:Literal> | |
654 </ogc:PropertyIsEqualTo> | |
655 <ogc:PropertyIsEqualTo> | |
656 <ogc:Function name="numberFormat"> | |
657 <ogc:Literal>0.0</ogc:Literal> | |
658 <ogc:PropertyName>height</ogc:PropertyName> | |
659 </ogc:Function> | |
660 <ogc:Literal>1.7</ogc:Literal> | |
661 </ogc:PropertyIsEqualTo> | |
662 <ogc:PropertyIsEqualTo> | |
663 <ogc:Function name="numberFormat"> | |
664 <ogc:Literal>0.0</ogc:Literal> | |
665 <ogc:PropertyName>height</ogc:PropertyName> | |
666 </ogc:Function> | |
667 <ogc:Literal>1.9</ogc:Literal> | |
668 </ogc:PropertyIsEqualTo> | |
669 <ogc:PropertyIsEqualTo> | |
670 <ogc:Function name="numberFormat"> | |
671 <ogc:Literal>0.0</ogc:Literal> | |
672 <ogc:PropertyName>height</ogc:PropertyName> | |
673 </ogc:Function> | |
674 <ogc:Literal>2.1</ogc:Literal> | |
675 </ogc:PropertyIsEqualTo> | |
676 <ogc:PropertyIsEqualTo> | |
677 <ogc:Function name="numberFormat"> | |
678 <ogc:Literal>0.0</ogc:Literal> | |
679 <ogc:PropertyName>height</ogc:PropertyName> | |
680 </ogc:Function> | |
681 <ogc:Literal>2.3</ogc:Literal> | |
682 </ogc:PropertyIsEqualTo> | |
683 <ogc:PropertyIsEqualTo> | |
684 <ogc:Function name="numberFormat"> | |
685 <ogc:Literal>0.0</ogc:Literal> | |
686 <ogc:PropertyName>height</ogc:PropertyName> | |
687 </ogc:Function> | |
688 <ogc:Literal>2.5</ogc:Literal> | |
689 </ogc:PropertyIsEqualTo> | |
690 <ogc:PropertyIsEqualTo> | |
691 <ogc:Function name="numberFormat"> | |
692 <ogc:Literal>0.0</ogc:Literal> | |
693 <ogc:PropertyName>height</ogc:PropertyName> | |
694 </ogc:Function> | |
695 <ogc:Literal>2.7</ogc:Literal> | |
696 </ogc:PropertyIsEqualTo> | |
697 <ogc:PropertyIsEqualTo> | |
698 <ogc:Function name="numberFormat"> | |
699 <ogc:Literal>0.0</ogc:Literal> | |
700 <ogc:PropertyName>height</ogc:PropertyName> | |
701 </ogc:Function> | |
702 <ogc:Literal>2.9</ogc:Literal> | |
703 </ogc:PropertyIsEqualTo> | |
704 <ogc:PropertyIsEqualTo> | |
705 <ogc:Function name="numberFormat"> | |
706 <ogc:Literal>0.0</ogc:Literal> | |
707 <ogc:PropertyName>height</ogc:PropertyName> | |
708 </ogc:Function> | |
709 <ogc:Literal>3.1</ogc:Literal> | |
710 </ogc:PropertyIsEqualTo> | |
711 <ogc:PropertyIsEqualTo> | |
712 <ogc:Function name="numberFormat"> | |
713 <ogc:Literal>0.0</ogc:Literal> | |
714 <ogc:PropertyName>height</ogc:PropertyName> | |
715 </ogc:Function> | |
716 <ogc:Literal>3.3</ogc:Literal> | |
717 </ogc:PropertyIsEqualTo> | |
718 <ogc:PropertyIsEqualTo> | |
719 <ogc:Function name="numberFormat"> | |
720 <ogc:Literal>0.0</ogc:Literal> | |
721 <ogc:PropertyName>height</ogc:PropertyName> | |
722 </ogc:Function> | |
723 <ogc:Literal>3.5</ogc:Literal> | |
724 </ogc:PropertyIsEqualTo> | |
725 <ogc:PropertyIsEqualTo> | |
726 <ogc:Function name="numberFormat"> | |
727 <ogc:Literal>0.0</ogc:Literal> | |
728 <ogc:PropertyName>height</ogc:PropertyName> | |
729 </ogc:Function> | |
730 <ogc:Literal>4.0</ogc:Literal> | |
731 </ogc:PropertyIsEqualTo> | |
732 <ogc:PropertyIsEqualTo> | |
733 <ogc:Function name="numberFormat"> | |
734 <ogc:Literal>0.0</ogc:Literal> | |
735 <ogc:PropertyName>height</ogc:PropertyName> | |
736 </ogc:Function> | |
737 <ogc:Literal>4.5</ogc:Literal> | |
738 </ogc:PropertyIsEqualTo> | |
739 <ogc:PropertyIsEqualTo> | |
740 <ogc:Function name="numberFormat"> | |
741 <ogc:Literal>0.0</ogc:Literal> | |
742 <ogc:PropertyName>height</ogc:PropertyName> | |
743 </ogc:Function> | |
744 <ogc:Literal>5.0</ogc:Literal> | |
745 </ogc:PropertyIsEqualTo> | |
746 <ogc:PropertyIsEqualTo> | |
747 <ogc:Function name="numberFormat"> | |
748 <ogc:Literal>0.0</ogc:Literal> | |
749 <ogc:PropertyName>height</ogc:PropertyName> | |
750 </ogc:Function> | |
751 <ogc:Literal>5.5</ogc:Literal> | |
752 </ogc:PropertyIsEqualTo> | |
753 <ogc:PropertyIsEqualTo> | |
754 <ogc:Function name="numberFormat"> | |
755 <ogc:Literal>0.0</ogc:Literal> | |
756 <ogc:PropertyName>height</ogc:PropertyName> | |
757 </ogc:Function> | |
758 <ogc:Literal>6.0</ogc:Literal> | |
759 </ogc:PropertyIsEqualTo> | |
760 <ogc:PropertyIsEqualTo> | |
761 <ogc:Function name="numberFormat"> | |
762 <ogc:Literal>0.0</ogc:Literal> | |
763 <ogc:PropertyName>height</ogc:PropertyName> | |
764 </ogc:Function> | |
765 <ogc:Literal>6.5</ogc:Literal> | |
766 </ogc:PropertyIsEqualTo> | |
767 <ogc:PropertyIsEqualTo> | |
768 <ogc:Function name="numberFormat"> | |
769 <ogc:Literal>0.0</ogc:Literal> | |
770 <ogc:PropertyName>height</ogc:PropertyName> | |
771 </ogc:Function> | |
772 <ogc:Literal>7.0</ogc:Literal> | |
773 </ogc:PropertyIsEqualTo> | |
774 <ogc:PropertyIsEqualTo> | |
775 <ogc:Function name="numberFormat"> | |
776 <ogc:Literal>0.0</ogc:Literal> | |
777 <ogc:PropertyName>height</ogc:PropertyName> | |
778 </ogc:Function> | |
779 <ogc:Literal>7.5</ogc:Literal> | |
780 </ogc:PropertyIsEqualTo> | |
781 </ogc:Or> | |
782 </ogc:Filter> | |
783 <se:MaxScaleDenominator>5e3</se:MaxScaleDenominator> | |
784 <se:LineSymbolizer> | |
785 <se:Stroke> | |
786 <se:SvgParameter name="stroke-width">1.5</se:SvgParameter> | |
787 <se:SvgParameter name="stroke"> | |
788 <ogc:Function name="Recode"> | |
789 <ogc:Function name="numberFormat"> | |
790 <ogc:Literal>0.0</ogc:Literal> | |
791 <ogc:PropertyName>height</ogc:PropertyName> | |
792 </ogc:Function> | |
793 <ogc:Literal>1.0</ogc:Literal> | |
794 <ogc:Literal>#ff00dd</ogc:Literal> | |
795 <ogc:Literal>1.5</ogc:Literal> | |
796 <ogc:Literal>#fb08b6</ogc:Literal> | |
797 <ogc:Literal>1.7</ogc:Literal> | |
798 <ogc:Literal>#f81090</ogc:Literal> | |
799 <ogc:Literal>1.9</ogc:Literal> | |
800 <ogc:Literal>#f5196a</ogc:Literal> | |
801 <ogc:Literal>2.1</ogc:Literal> | |
802 <ogc:Literal>#f22144</ogc:Literal> | |
803 <ogc:Literal>2.3</ogc:Literal> | |
804 <ogc:Literal>#f03326</ogc:Literal> | |
805 <ogc:Literal>2.5</ogc:Literal> | |
806 <ogc:Literal>#f25f20</ogc:Literal> | |
807 <ogc:Literal>2.7</ogc:Literal> | |
808 <ogc:Literal>#f38b1a</ogc:Literal> | |
809 <ogc:Literal>2.9</ogc:Literal> | |
810 <ogc:Literal>#f5b814</ogc:Literal> | |
811 <ogc:Literal>3.1</ogc:Literal> | |
812 <ogc:Literal>#f7e40e</ogc:Literal> | |
813 <ogc:Literal>3.3</ogc:Literal> | |
814 <ogc:Literal>#e2f30e</ogc:Literal> | |
815 <ogc:Literal>3.5</ogc:Literal> | |
816 <ogc:Literal>#b6e414</ogc:Literal> | |
817 <ogc:Literal>4.0</ogc:Literal> | |
818 <ogc:Literal>#8ad51a</ogc:Literal> | |
819 <ogc:Literal>4.5</ogc:Literal> | |
820 <ogc:Literal>#5ec620</ogc:Literal> | |
821 <ogc:Literal>5.0</ogc:Literal> | |
822 <ogc:Literal>#32b726</ogc:Literal> | |
823 <ogc:Literal>5.5</ogc:Literal> | |
824 <ogc:Literal>#249a49</ogc:Literal> | |
825 <ogc:Literal>6.0</ogc:Literal> | |
826 <ogc:Literal>#207977</ogc:Literal> | |
827 <ogc:Literal>6.5</ogc:Literal> | |
828 <ogc:Literal>#1c57a4</ogc:Literal> | |
829 <ogc:Literal>7.0</ogc:Literal> | |
830 <ogc:Literal>#1835d1</ogc:Literal> | |
831 <ogc:Literal>7.5</ogc:Literal> | |
832 <ogc:Literal>#1414ff</ogc:Literal> | |
833 </ogc:Function> | |
834 </se:SvgParameter> | |
835 </se:Stroke> | |
836 </se:LineSymbolizer> | |
837 </se:Rule> | |
838 </se:FeatureTypeStyle> | |
839 <se:FeatureTypeStyle> | |
840 <se:Name>contour_lines_label</se:Name> | |
841 <se:Description> | |
842 <se:Abstract> | |
843 FeatureTypeStyle for labels at contour lines | |
844 </se:Abstract> | |
845 </se:Description> | |
846 <se:Rule> | |
847 <se:MaxScaleDenominator>5e3</se:MaxScaleDenominator> | |
848 <se:TextSymbolizer> | |
849 <se:Label> | |
850 <ogc:Function name="Recode"> | |
851 <ogc:Function name="numberFormat"> | |
852 <ogc:Literal>0.0</ogc:Literal> | |
853 <ogc:PropertyName>height</ogc:PropertyName> | |
854 </ogc:Function> | |
855 <ogc:Literal>1.0</ogc:Literal><ogc:Literal>1.0</ogc:Literal> | |
856 <ogc:Literal>1.5</ogc:Literal><ogc:Literal>1.5</ogc:Literal> | |
857 <ogc:Literal>1.7</ogc:Literal><ogc:Literal>1.7</ogc:Literal> | |
858 <ogc:Literal>1.9</ogc:Literal><ogc:Literal>1.9</ogc:Literal> | |
859 <ogc:Literal>2.1</ogc:Literal><ogc:Literal>2.1</ogc:Literal> | |
860 <ogc:Literal>2.3</ogc:Literal><ogc:Literal>2.3</ogc:Literal> | |
861 <ogc:Literal>2.5</ogc:Literal><ogc:Literal>2.5</ogc:Literal> | |
862 <ogc:Literal>2.7</ogc:Literal><ogc:Literal>2.7</ogc:Literal> | |
863 <ogc:Literal>2.9</ogc:Literal><ogc:Literal>2.9</ogc:Literal> | |
864 <ogc:Literal>3.1</ogc:Literal><ogc:Literal>3.1</ogc:Literal> | |
865 <ogc:Literal>3.3</ogc:Literal><ogc:Literal>3.3</ogc:Literal> | |
866 <ogc:Literal>3.5</ogc:Literal><ogc:Literal>3.5</ogc:Literal> | |
867 <ogc:Literal>4.0</ogc:Literal><ogc:Literal>4.0</ogc:Literal> | |
868 <ogc:Literal>4.5</ogc:Literal><ogc:Literal>4.5</ogc:Literal> | |
869 <ogc:Literal>5.0</ogc:Literal><ogc:Literal>5.0</ogc:Literal> | |
870 <ogc:Literal>5.5</ogc:Literal><ogc:Literal>5.5</ogc:Literal> | |
871 <ogc:Literal>6.0</ogc:Literal><ogc:Literal>6.0</ogc:Literal> | |
872 <ogc:Literal>6.5</ogc:Literal><ogc:Literal>6.5</ogc:Literal> | |
873 <ogc:Literal>7.0</ogc:Literal><ogc:Literal>7.0</ogc:Literal> | |
874 <ogc:Literal>7.5</ogc:Literal><ogc:Literal>7.5</ogc:Literal> | |
875 </ogc:Function> | |
876 </se:Label> | |
877 <se:LabelPlacement> | |
878 <se:LinePlacement> | |
879 <se:PerpendicularOffset>5</se:PerpendicularOffset> | |
880 </se:LinePlacement> | |
881 </se:LabelPlacement> | |
882 <se:Font> | |
883 <se:SvgParameter name="font-family">Avenir</se:SvgParameter> | |
884 <se:SvgParameter name="font-family">Helvetica</se:SvgParameter> | |
885 <se:SvgParameter name="font-family">Arial</se:SvgParameter> | |
886 <se:SvgParameter name="font-family">sans-serif</se:SvgParameter> | |
887 </se:Font> | |
888 <se:Fill> | |
889 <se:SvgParameter name="fill">#070707</se:SvgParameter> | |
890 </se:Fill> | |
891 </se:TextSymbolizer> | |
892 </se:Rule> | |
893 </se:FeatureTypeStyle> | |
894 </UserStyle> | |
895 </NamedLayer> | |
896 </StyledLayerDescriptor> | |
897 ` | |
898 | |
899 const classBreaksConfig = `1:#ff00dd,1.5,1.7,1.9,2.1,2.3,2.5:#f25f20,2.7,2.9,3.1,3.3,3.5,4:#8ad51a,4.5,5,5.5,6,6.5,7,7.5:#1414ff` | |
900 | |
901 type classBreaks struct { | |
902 High float64 | |
903 HasHigh bool | |
904 Low float64 | |
905 HasLow bool | |
906 Color string | |
907 } | |
908 | |
909 func TestTemplate(t *testing.T) { | |
910 | |
911 ccs, err := parseColorClasses(classBreaksConfig) | |
912 if err != nil { | |
913 t.Fatalf("parsing color config failed: %v", err) | |
914 } | |
915 | |
916 /* | |
917 for i := range ccs { | |
918 fmt.Printf("%.1f #%02x%02x%02x\n", | |
919 ccs[i].value, | |
920 ccs[i].color.R, | |
921 ccs[i].color.G, | |
922 ccs[i].color.B) | |
923 } | |
924 */ | |
925 | |
926 cbs := make([]classBreaks, len(ccs)) | |
927 for i := range ccs { | |
928 if i > 0 { | |
929 cbs[i].Low = ccs[i-1].value | |
930 cbs[i].HasLow = true | |
931 } | |
932 if i < len(ccs)-1 { | |
933 cbs[i].High = ccs[i].value | |
934 cbs[i].HasHigh = true | |
935 } | |
936 cbs[i].Color = fmt.Sprintf("#%02x%02x%02x", | |
937 ccs[i].color.R, | |
938 ccs[i].color.G, | |
939 ccs[i].color.B) | |
940 } | |
941 | |
942 tmpl, err := template.New("test").Parse(sldTmplTxt) | |
943 if err != nil { | |
944 t.Fatalf("parsing template failed: %v", err) | |
945 } | |
946 | |
947 var buf strings.Builder | |
948 if err := tmpl.Execute(&buf, cbs); err != nil { | |
949 t.Fatalf("templating failed: %v", err) | |
950 } | |
951 | |
952 has := buf.String() | |
953 if has != origSLD { | |
954 dmp := diffmatchpatch.New() | |
955 diffs := dmp.DiffMain(has, origSLD, true) | |
956 t.Fatalf("Templating results differ: %s", dmp.DiffPrettyText(diffs)) | |
957 } | |
958 } |