[Geoserver-devel] Line labeling and perpendicular offset

Hi,
following a report from a user I was checking the SLD/SE specifications
about the meaning of PerpendicularOffset

------------------------------------------------------------------

The PerpendicularOffset element of a LinePlacement gives the perpendicular
distance away from a line to draw a label. It is defined simply as:
     <xs:element name="PerpendicularOffset"
                    type="sld:ParameterValueType"/>
The distance is in pixels and is positive to the left-hand side of the line string. Negative
numbers mean right. The default offset is 0.

-------------------------------------------------------------------

By implementing the spec to the letter it seems that a horizontal
road labels would appear either above or below the line depending
on the orientation of the line.

What we do instead considers the eventual label flipping, that
we do to keep the label readable, and flips the offset as well.
In other words, if you consider a horizontal line oriented
from east to west with positive offset, the natural position
of the label would be below the line, and upside down,
but in order to keep it readable we flip both the label and
the offset and end up with a label that is above the line
and readable.

Now, for road labeling this is what I would honestly expect
from a positive value ("positive must mean above, right?")
yet that is not what the spec says for lines oriented from
east to west.

Now, the user in question has a legit case for want the
labels below: he wants to label the border or a polygon
the way google does it for state/province borders.
See the Wisconsin/Iowa border here for an example: http://maps.google.com/?ie=UTF8&ll=42.599598,-90.702095&spn=0.185244,0.445976&z=12

Besides that, we're not really respecting the spec...

So, what shall we do? I was thinking to provide a
new vendor options "absoluteOffset" true/false that
would control if we adjust the offset or follow the
spec by the letter (anyone with a better name?)

The bigger question is, what will be the default.
Do we follow the spec by the letter by default, even if
it does not make much sense and it will break backwards
compatibility for uDig/GeoTools/GeoServer users, or
we default on our current behavior?

Or we roll a global flag to determine what the default
would be (a rendering hint?)

Cheers
Andrea

--
Andrea Aime
OpenGeo - http://opengeo.org
Expert service straight from the developers.

Hi Andrea:

Thanks for the detailed background - stuck between a rock and a hard place.

I would prefer the defaults to be chosen for speed; rather then pretty (but
perhaps that is me).

In this case I don't like the idea of changing rendering on something that
is already deployed everywhere.

So although I usually consider following the standard strictly as the default
setting; I think we should resist and maintain current behaviour.

Always fun when a user reads the standard more carefully (or in a different manner)
then we have.

Jody

On 28/06/2010, at 6:08 PM, Andrea Aime wrote:

Hi,
following a report from a user I was checking the SLD/SE specifications
about the meaning of PerpendicularOffset

------------------------------------------------------------------

The PerpendicularOffset element of a LinePlacement gives the perpendicular
distance away from a line to draw a label. It is defined simply as:
    <xs:element name="PerpendicularOffset"
                   type="sld:ParameterValueType"/>
The distance is in pixels and is positive to the left-hand side of the
line string. Negative
numbers mean right. The default offset is 0.

-------------------------------------------------------------------

By implementing the spec to the letter it seems that a horizontal
road labels would appear either above or below the line depending
on the orientation of the line.

What we do instead considers the eventual label flipping, that
we do to keep the label readable, and flips the offset as well.
In other words, if you consider a horizontal line oriented
from east to west with positive offset, the natural position
of the label would be below the line, and upside down,
but in order to keep it readable we flip both the label and
the offset and end up with a label that is above the line
and readable.

Now, for road labeling this is what I would honestly expect
from a positive value ("positive must mean above, right?")
yet that is not what the spec says for lines oriented from
east to west.

Now, the user in question has a legit case for want the
labels below: he wants to label the border or a polygon
the way google does it for state/province borders.
See the Wisconsin/Iowa border here for an example:
http://maps.google.com/?ie=UTF8&ll=42.599598,-90.702095&spn=0.185244,0.445976&z=12

Besides that, we're not really respecting the spec...

So, what shall we do? I was thinking to provide a
new vendor options "absoluteOffset" true/false that
would control if we adjust the offset or follow the
spec by the letter (anyone with a better name?)

The bigger question is, what will be the default.
Do we follow the spec by the letter by default, even if
it does not make much sense and it will break backwards
compatibility for uDig/GeoTools/GeoServer users, or
we default on our current behavior?

Or we roll a global flag to determine what the default
would be (a rendering hint?)

Cheers
Andrea

--
Andrea Aime
OpenGeo - http://opengeo.org
Expert service straight from the developers.

------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel