[mapserver-dev] Label positioning around points

Daniel Morissette dmorissette at mapgears.com
Fri Sep 21 08:23:18 PDT 2012

Please everyone note that there was a vote of the PSC supporting the 
change back in March, so perhaps those who voted +1 could 
explain/support why they thought the new order is better? I don't think 
we'll ever find an order that will make everybody happy and FWIW I was 
not keen on the change (I was -0 and then changed to +0 on that vote) 
with my main argument being backwards compatibility on an established 

Rereading some of the past discussions, I see some contradictions in the 
"litterature" that is referred to, especially with respect to the "C" 
positions (UC, LC, CR, CL) which seem to be at the core of the debate. 
Havart's and Christy's references in this thread suggest that the "C" 
positions should either come last or be skipped, and SteveW's refs in 
#4242 put them first:


Please also have a look at the screen grabs attached to ticket #4242 
(showing before and after), there is obviously some good in the proposed 
order even if there is no litterature backing it. However as I wrote 
before what is good for this use case may be bad for another one.


I dunno what to think and I will surely not spend time reading a bunch 
of papers to decide which one is right, but if differents papers 
contradict themselves and we cannot agree on the "best" order then I'd 
prefer that we return to the 6.0 behavior until someone has time/funds 
to implement proper configuration options for this. We can still revert 
the constants for 6.2, but it's too late to implement new config 
mechanisms for this.

My 0.02$


On 12-09-21 10:46 AM, Christy Nieman wrote:
> I appreciate that this discussion is coming back up!  I agree that the
> default order should be based on cartographic convention.  And while the
> 6.0 and earlier order was not conforming to cartographic best practices,
> changing it with so little discussion/input/warning seems short-sighted
> as it drastically changes map output as compared to older mapserver
> versions.
> On 09/21/2012 10:26 AM, Havard Tveite wrote:
>> I have seen the discussion, and the activity on github.
>> However, it seems as if the "decision" that was made then
>> was not based on cartographical best practice, as
>> documented in the cartography literature.
>> That is why I wanted to continue the discussion.
>> In my opinion, the label positioning method used in
>> Mapserver should as much as possible be scientifically
>> based.  I would like to see documentation that supports
>> the proposed (master) method and the current (6.0) method.
>> Håvard
>> On 9/21/2012 4:02 PM, Stephen Woodbridge wrote:
>>> The was discussed a lot a few months ago.
>>> https://github.com/mapserver/mapserver/issues/4242
>>> https://github.com/mapserver/mapserver/issues/4249
>>> http://lists.osgeo.org/pipermail/mapserver-dev/2012-February/012003.html
>>> -Steve W
>>> On 9/21/2012 5:55 AM, Havard Tveite wrote:
>>>> On 7/18/2012 5:45 PM, Christy Nieman wrote:
>>>> > Hi all,
>>>> >
>>>> > I was just wondering if the position order around points is still
>>>> open for comment.
>>>> >
>>>> > I know that there was discussion about this in the spring, and that a
>>>> change was implemented (though, I have to admit that I just noticed the
>>>> difference when comparing a tile cache that I created before the change
>>>> to one created a couple weeks ago). I'm not sure if having UC and LC as
>>>> the first two positions considered preferable to how the positioning
>>>> worked before. In a cluttered map, I find it non-intuitive to associate
>>>> a point with a label that is centred above/below it. I would personally
>>>> expect something like UR, UL, LR, LL, CR, CL, UC, LC. Map labelling
>>>> convention for points based on what I remember from my schooling and my
>>>> experiences since then seem to prefer UR and LR as the first locations
>>>> to consider.
>>>> >
>>>> > If it is not desirable to implement another change to the AUTO label
>>>> position order, perhaps it is necessary to consider the suggestion from
>>>> the spring to have the option of specifying a custom "AUTO" label
>>>> placement order (no idea how difficult this would be to implement).
>>>> >
>>>> > I just wanted to throw this out there.
>>>> >
>>>> > Regards,
>>>> > Christy
>>>> I suggest that we do something about this, and I hope that it
>>>> can be done before 6.2 is released.
>>>> I have found out that the AUTO label positioning is done in
>>>> mapdraw.c.
>>>> For points the AUTO behaviour has changed from 6.0 to master.
>>>> If the behaviour is to be changed, it should be done in
>>>> accordance with cartographical literature and best practice.
>>>> In "Thematic Cartography and Geographic Visualization", 2nd
>>>> edition (Slocum, et. al., 2005), the following sequence is
>>>> listed for point labeling (referring to Pinhas Yoeli, 1972,
>>>> but modified to give preference to R placement - same as
>>>> for legends):
>>>> CR and CL are placed last, because those positions can result
>>>> in "unfavourable optical coincidence" (Imhof 1975) - the point
>>>> symbol could be misinterpreted as a type character in the label.
>>>> In "Elements of Cartography" (Robinson, et.al.), the following
>>>> sequence is listed for point labelling:
>>>> UR,UL,LR,LL,UC,LC (CR and CL are not included, but some more
>>>> variants of upper placement are listed as 7-9).
>>>> The way I see it, it would be useful to change the behaviour
>>>> of Mapserver auto labelling.
>>>> 1) UR must be given the highest priority.
>>>> 2) LL, UC, LC, CR and CL should be given lowest priority.
>>>> 3) Someone must decide the sequence for LR and UL.
>>>> These are then the two possible sequences:
>>>> I see two options for 6.2:
>>>> a) modify mapdraw.c to revert to 6.0 behaviour.
>>>> b) modify mapdraw.c by changing the sequence to one that
>>>> is according to cartographical practice and literature.
>>>> Håvard
>>>> Mapserver label placement auto:
>>>> 6.0 (and 5.6):
>>>> Polygon:
>>>> positions[0]=MS_CC;
>>>> positions[1]=MS_UC;
>>>> positions[2]=MS_LC;
>>>> positions[3]=MS_CL;
>>>> positions[4]=MS_CR;
>>>> Line:
>>>> positions[0]=MS_UC;
>>>> positions[1]=MS_LC;
>>>> positions[2]=MS_CC;
>>>> Point:
>>>> positions[0]=MS_UL;
>>>> positions[1]=MS_LR;
>>>> positions[2]=MS_UR;
>>>> positions[3]=MS_LL;
>>>> positions[4]=MS_CR;
>>>> positions[5]=MS_CL;
>>>> positions[6]=MS_UC;
>>>> positions[7]=MS_LC;
>>>> master:
>>>> Polygon:
>>>> positions[0]=MS_CC;
>>>> positions[1]=MS_UC;
>>>> positions[2]=MS_LC;
>>>> positions[3]=MS_CL;
>>>> positions[4]=MS_CR;
>>>> Line:
>>>> positions[0]=MS_UC;
>>>> positions[1]=MS_LC;
>>>> positions[2]=MS_CC;
>>>> Point:
>>>> positions[0]=MS_UC;
>>>> positions[1]=MS_LC;
>>>> positions[2]=MS_CR;
>>>> positions[3]=MS_CL;
>>>> positions[4]=MS_UR;
>>>> positions[5]=MS_UL;
>>>> positions[6]=MS_LR;
>>>> positions[7]=MS_LL;
>>> _______________________________________________
>>> mapserver-dev mailing list
>>> mapserver-dev at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/mapserver-dev
> _______________________________________________
> mapserver-dev mailing list
> mapserver-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-dev

Daniel Morissette
Provider of Professional MapServer Support since 2000

More information about the mapserver-dev mailing list