@@ -338,13 +338,14 @@ class Translator(val baseURL: Option[java.net.URL]) {
338
338
* Convert a set of properties to a set of Symbolizer objects attached to the
339
339
* given Rule.
340
340
*/
341
- def symbolize (rule : Rule ): Seq [Pair [Double , Symbolizer ]] = {
341
+ def symbolize (rule : Rule ): Seq [Pair [(Double , Option [OGCExpression ]), Symbolizer ]] = {
342
+ type Key = (Double , Option [OGCExpression ])
342
343
val properties = rule.properties
343
344
344
345
def orderedMarkRules (symbolizerType : String , order : Int ): Seq [Property ] =
345
346
rule.context(symbolizerType, order)
346
347
347
- val lineSyms : Seq [(Double , LineSymbolizer )] =
348
+ val lineSyms : Seq [(Key , LineSymbolizer )] =
348
349
(expand(properties, " stroke" ).toStream zip
349
350
(Stream .from(1 ) map { orderedMarkRules(" stroke" , _) })
350
351
).map { case (props, markProps) =>
@@ -388,10 +389,10 @@ class Translator(val baseURL: Option[java.net.URL]) {
388
389
null
389
390
)
390
391
sym.setGeometry(geom)
391
- (zIndex, sym)
392
+ (( zIndex, None ) , sym)
392
393
}
393
394
394
- val polySyms : Seq [(Double , PolygonSymbolizer )] =
395
+ val polySyms : Seq [(Key , PolygonSymbolizer )] =
395
396
(expand(properties, " fill" ).toStream zip
396
397
(Stream .from(1 ) map { orderedMarkRules(" fill" , _) })
397
398
).map { case (props, markProps) =>
@@ -419,10 +420,10 @@ class Translator(val baseURL: Option[java.net.URL]) {
419
420
null
420
421
)
421
422
sym.setGeometry(geom)
422
- (zIndex, sym)
423
+ (( zIndex, None ) , sym)
423
424
}
424
425
425
- val pointSyms : Seq [(Double , PointSymbolizer )] =
426
+ val pointSyms : Seq [(Key , PointSymbolizer )] =
426
427
(expand(properties, " mark" ).toStream zip
427
428
(Stream .from(1 ) map { orderedMarkRules(" mark" , _) })
428
429
).flatMap { case (props, markProps) =>
@@ -438,11 +439,11 @@ class Translator(val baseURL: Option[java.net.URL]) {
438
439
for (g <- graphic) yield {
439
440
val sym = styles.createPointSymbolizer(g, null )
440
441
sym.setGeometry(geom)
441
- (zIndex, sym)
442
+ (( zIndex, None ) , sym)
442
443
}
443
444
}
444
445
445
- val textSyms : Seq [(Double , TextSymbolizer )] =
446
+ val textSyms : Seq [(Key , TextSymbolizer )] =
446
447
(expand(properties, " label" ).toStream zip
447
448
(Stream .from(1 ) map { orderedMarkRules(" shield" , _) })
448
449
).map { case (props, shieldProps) =>
@@ -549,7 +550,7 @@ class Translator(val baseURL: Option[java.net.URL]) {
549
550
)
550
551
}
551
552
552
- (zIndex, sym)
553
+ (( zIndex, None ) , sym)
553
554
}
554
555
555
556
Seq (polySyms, lineSyms, pointSyms, textSyms).flatten
@@ -607,21 +608,29 @@ class Translator(val baseURL: Option[java.net.URL]) {
607
608
for (name <- typenames) yield (name, rules filter isForTypename(name) map stripTypenames)
608
609
609
610
for ((typename, overlays) <- styleRules) {
610
- val zGroups : Seq [((Double , Option [OGCExpression ]), (Rule , Seq [gt.Symbolizer ]))] =
611
- for {
612
- rule <- cascading2exclusive(overlays)
613
- (z, syms) <- orderedRuns(symbolize(rule))
614
- } yield ((z, None ), (rule, syms))
611
+ val expandedRules = cascading2exclusive(overlays)
615
612
616
613
// In order to ensure minimal output, the conversion requires that like
617
614
// transforms be sorted together. However, there is no natural ordering
618
615
// over OGC Expressions. Instead, we synthesize one by generating a list
619
616
// of all transform expressions used in this stylesheet and indexing into
620
617
// it to get a sort key.
621
- val allTransforms = zGroups.map { case ((_, tx), _) => tx }.distinct
618
+ val allTransforms =
619
+ expandedRules
620
+ .flatMap(symbolize)
621
+ .map { case ((_, tx), _) => tx }
622
+ .distinct
623
+
622
624
implicit val transformOrdering : Ordering [OGCExpression ] =
623
625
Ordering .by { x => allTransforms.indexOf(x) }
624
626
627
+ val zGroups : Seq [((Double , Option [OGCExpression ]), (Rule , Seq [gt.Symbolizer ]))] =
628
+ for {
629
+ rule <- expandedRules
630
+ (key, syms) <- orderedRuns(symbolize(rule))
631
+ } yield (key, (rule, syms))
632
+
633
+
625
634
for (((_, transform), group) <- orderedRuns(zGroups)) {
626
635
val fts = styles.createFeatureTypeStyle
627
636
transform.foreach { fts.setTransformation }
0 commit comments