Skip to content

Commit 4186ff9

Browse files
committed
Set up symbolize() to extract transformation properties from rules
1 parent 2e16ae4 commit 4186ff9

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

geocss/src/main/scala/Translator.scala

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -338,13 +338,14 @@ class Translator(val baseURL: Option[java.net.URL]) {
338338
* Convert a set of properties to a set of Symbolizer objects attached to the
339339
* given Rule.
340340
*/
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])
342343
val properties = rule.properties
343344

344345
def orderedMarkRules(symbolizerType: String, order: Int): Seq[Property] =
345346
rule.context(symbolizerType, order)
346347

347-
val lineSyms: Seq[(Double, LineSymbolizer)] =
348+
val lineSyms: Seq[(Key, LineSymbolizer)] =
348349
(expand(properties, "stroke").toStream zip
349350
(Stream.from(1) map { orderedMarkRules("stroke", _) })
350351
).map { case (props, markProps) =>
@@ -388,10 +389,10 @@ class Translator(val baseURL: Option[java.net.URL]) {
388389
null
389390
)
390391
sym.setGeometry(geom)
391-
(zIndex, sym)
392+
((zIndex, None), sym)
392393
}
393394

394-
val polySyms: Seq[(Double, PolygonSymbolizer)] =
395+
val polySyms: Seq[(Key, PolygonSymbolizer)] =
395396
(expand(properties, "fill").toStream zip
396397
(Stream.from(1) map { orderedMarkRules("fill", _) })
397398
).map { case (props, markProps) =>
@@ -419,10 +420,10 @@ class Translator(val baseURL: Option[java.net.URL]) {
419420
null
420421
)
421422
sym.setGeometry(geom)
422-
(zIndex, sym)
423+
((zIndex, None), sym)
423424
}
424425

425-
val pointSyms: Seq[(Double, PointSymbolizer)] =
426+
val pointSyms: Seq[(Key, PointSymbolizer)] =
426427
(expand(properties, "mark").toStream zip
427428
(Stream.from(1) map { orderedMarkRules("mark", _) })
428429
).flatMap { case (props, markProps) =>
@@ -438,11 +439,11 @@ class Translator(val baseURL: Option[java.net.URL]) {
438439
for (g <- graphic) yield {
439440
val sym = styles.createPointSymbolizer(g, null)
440441
sym.setGeometry(geom)
441-
(zIndex, sym)
442+
((zIndex, None), sym)
442443
}
443444
}
444445

445-
val textSyms: Seq[(Double, TextSymbolizer)] =
446+
val textSyms: Seq[(Key, TextSymbolizer)] =
446447
(expand(properties, "label").toStream zip
447448
(Stream.from(1) map { orderedMarkRules("shield", _) })
448449
).map { case (props, shieldProps) =>
@@ -549,7 +550,7 @@ class Translator(val baseURL: Option[java.net.URL]) {
549550
)
550551
}
551552

552-
(zIndex, sym)
553+
((zIndex, None), sym)
553554
}
554555

555556
Seq(polySyms, lineSyms, pointSyms, textSyms).flatten
@@ -607,21 +608,29 @@ class Translator(val baseURL: Option[java.net.URL]) {
607608
for (name <- typenames) yield (name, rules filter isForTypename(name) map stripTypenames)
608609

609610
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)
615612

616613
// In order to ensure minimal output, the conversion requires that like
617614
// transforms be sorted together. However, there is no natural ordering
618615
// over OGC Expressions. Instead, we synthesize one by generating a list
619616
// of all transform expressions used in this stylesheet and indexing into
620617
// 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+
622624
implicit val transformOrdering: Ordering[OGCExpression] =
623625
Ordering.by { x => allTransforms.indexOf(x) }
624626

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+
625634
for (((_, transform), group) <- orderedRuns(zGroups)) {
626635
val fts = styles.createFeatureTypeStyle
627636
transform.foreach { fts.setTransformation }

0 commit comments

Comments
 (0)