enable label collision-management in sld context
Paul Ramsey
pramsey at REFRACTIONS.NET
Sat Jan 14 19:39:54 EST 2006
Peter,
Dave Blasby has been experimenting with enhanced SLD and labeling,
with the aim of having the enhancements land back in the next SLD
revision. Rather than hacking into the old SLD spec, anticipating
the next one might be better.
Paul
On 14-Jan-06, at 4:39 PM, Peter Freimuth wrote:
> Hi Mapserver Development Team,
> in a currently running project we have the urgent need to use SLD
> Filtering and Symbolising in a WMS Get Map Request. But the problem
> is that mapservers label collision management cannot be used via
> SLD, because it is not part of the specs and so not supported by
> umn's sld interface. So what do you think about -1 and -1 as
> AnchorPoint values which has the same effect than POSITION=AUTO in
> the Mapfile. I think a lot of people would like to have this
> feature enabled, even if it is not written in the OGC SLD specs.
> Example:
> <TextSymbolizer>
> <Geometry>
> <ogc:PropertyName>GEOM</ogc:PropertyName>
> </Geometry>
> <Label>
> <ogc:PropertyName>NAME</ogc:PropertyName>
> </Label>
> <Font>
> <CssParameter name="font-family">Arial</CssParameter>
> <CssParameter name="font-family">Sans-Serif</
> CssParameter>
> <CssParameter name="font-style">italic</CssParameter>
> <CssParameter name="font-size">10</CssParameter>
> <CssParameter name="font-color">#222222</CssParameter>
> </Font>
> <LabelPlacement>
> <AnchorPointX>-1</AnchorPointX>
> /<AnchorPointY>-1</AnchorPointY>
> would be equal to /<PointPlacement auto="true"/> which can be used
> in GeoServer for example
> </LabelPlacement>
> ...
> </TextSymbolizer>
> and handle this in:
>
> void ParseTextPointPlacement(CPLXMLNode *psRoot, classObj *psClass)
> ...
> if ((dfAnchorX == 0 || dfAnchorX == 0.5 || dfAnchorX
> == 1) &&
> (dfAnchorY == 0 || dfAnchorY == 0.5 || dfAnchorY
> == 1))
> {
> if (dfAnchorX == 0 && dfAnchorY == 0)
> psClass->label.position = MS_LL;
> if (dfAnchorX == 0 && dfAnchorY == 0.5)
> psClass->label.position = MS_CL;
> if (dfAnchorX == 0 && dfAnchorY == 1)
> psClass->label.position = MS_UL;
> if (dfAnchorX == 0.5 && dfAnchorY == 0)
> psClass->label.position = MS_LC;
> if (dfAnchorX == 0.5 && dfAnchorY == 0.5)
> psClass->label.position = MS_CC;
> if (dfAnchorX == 0.5 && dfAnchorY == 1)
> psClass->label.position = MS_UC;
> if (dfAnchorX == 1 && dfAnchorY == 0)
> psClass->label.position = MS_LR;
> if (dfAnchorX == 1 && dfAnchorY == 0.5)
> psClass->label.position = MS_CR;
> if (dfAnchorX == 1 && dfAnchorY == 1)
> psClass->label.position = MS_UR;
> if (dfAnchorX == -1 && dfAnchorY == -1)
> psClass->label.position = MS_AUTO;
> }
>
> This will still be conform with the specs and give us the
> possibility to use mapserver label intelligence with sld's.
>
> Best regards,
> Peter
>
> --
> Mit freundlichem Gruß
>
> Peter Freimuth
> MapMedia
> Kartographie und raumbezogene Informationssysteme
>
> Heilbronner Straße 10
> D-10711 Berlin Charlottenburg
>
> fon: +49.(0)30.89 06 82 70
> fax: +49.(0)30.89 06 82 73
> mail: pf at mapmedia.de
> net: www.mapmedia.de
> pgp: on demand
> _________________________________________________
More information about the mapserver-dev
mailing list