Skip to content

Commit c6dec4a

Browse files
author
David Winslow
committed
Create pointplacement when label-anchor is provided and label-offset is not
fixes dwins#26
1 parent b255e55 commit c6dec4a

File tree

3 files changed

+43
-10
lines changed

3 files changed

+43
-10
lines changed

geocss/src/main/scala/org/geoscript/geocss/Translator.scala

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -565,23 +565,47 @@ class Translator(val baseURL: Option[java.net.URL]) {
565565
else
566566
None
567567

568-
val placement = offset match {
569-
case Some(Seq(Some(d))) => styles.createLinePlacement(d)
570-
case Some(Seq(Some(x), Some(y))) =>
568+
val linePlacementOption =
569+
offset.collect {
570+
case Seq(Some(d)) => styles.createLinePlacement(d)
571+
}
572+
573+
val pointPlacementOption =
574+
offset.collect {
575+
case Seq(Some(x), Some(y)) =>
576+
styles.createPointPlacement(
577+
anchorPoint.getOrElse(styles.getDefaultPointPlacement.getAnchorPoint),
578+
styles.createDisplacement(x, y),
579+
rotation.getOrElse(styles.getDefaultPointPlacement.getRotation))
580+
}
581+
582+
val anchorPlacementOption =
583+
anchorPoint.map { anchor =>
571584
styles.createPointPlacement(
572-
anchorPoint.getOrElse(styles.getDefaultPointPlacement().getAnchorPoint()),
573-
styles.createDisplacement(x, y),
574-
rotation.getOrElse(styles.getDefaultPointPlacement().getRotation())
575-
)
576-
case _ => null
577-
}
585+
anchor,
586+
styles.getDefaultPointPlacement.getDisplacement,
587+
rotation.getOrElse(styles.getDefaultPointPlacement.getRotation))
588+
}
589+
590+
val placement =
591+
linePlacementOption orElse pointPlacementOption orElse anchorPlacementOption
592+
// offset match {
593+
// case Some(Seq(Some(d))) => styles.createLinePlacement(d)
594+
// case Some(Seq(Some(x), Some(y))) =>
595+
// styles.createPointPlacement(
596+
// anchorPoint.getOrElse(styles.getDefaultPointPlacement().getAnchorPoint()),
597+
// styles.createDisplacement(x, y),
598+
// rotation.getOrElse(styles.getDefaultPointPlacement().getRotation())
599+
// )
600+
// case _ => null
601+
// }
578602

579603
val sym = styles.createTextSymbolizer(
580604
styles.createFill(fillParams.flatMap(_._3).orNull, null, fontOpacity.getOrElse(null), fontFill),
581605
font,
582606
halo,
583607
concatenatedExpression(props("label")),
584-
placement,
608+
placement.orNull,
585609
null //the geometry, but only as a string. the setter accepts an expression so we use that instead
586610
)
587611
geom.foreach { sym.setGeometry(_) }
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
* {
2+
label: [foo];
3+
label-anchor: 0.75 0.75;
4+
}

geocss/src/test/scala/org/geoscript/geocss/SLDTest.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,11 @@ class SLDTest extends FunSuite with ShouldMatchers {
345345
(f \ "@name").text should equal("strConcat")
346346
}
347347

348+
test("label-anchor should be applied even when no label-offset is provided") {
349+
val fontFill = css2sld2dom("/label-anchor.css")
350+
(fontFill \\ "AnchorPoint") should have(size(1))
351+
}
352+
348353
test("Solid font-fill should not use GraphicFill") {
349354
val fontFill = css2sld2dom("/font-fill.css")
350355
(fontFill \\ "GraphicFill") should have(size(0))

0 commit comments

Comments
 (0)