[mapserver-dev] MS vs GS aesthetics
David Fuhry
dfuhry at acm.org
Thu Sep 11 19:30:55 EDT 2008
In a recent release, Oracle MapViewer added automatic label rotation for
polygons (in 45-degree increments only). It's not configurable and
there's no information available on their methods, but the result is
looks good:
http://kddb1.kddb.cs.kent.edu/tmp/oracle_mapviewer_wv.jpeg
A LABELMETHOD tag would be nice to allow a choice of labeling
techniques, assuming some more advanced ones get implemented.
-Dave
Steve Lime wrote:
> Here's a page that references a couple of centroid options:
>
> http://www.spatialanalysisonline.com/output/html/Polygoncentroidsandcentres.html
>
> MapServer uses the MBR method and then falls back on a scanline conversion method
> derived from polygon fill algorithms to guarantee a point in the polygon.
>
> I could see adding a layer level parameter like LABELMETHOD to support various
> algorithms.
>
> Steve
>
>>>> On 9/11/2008 at 5:20 PM, in message <48C952C8.5157.008F.0 at dnr.state.mn.us>,
> "Steve Lime" <Steve.Lime at dnr.state.mn.us> wrote:
>> I did some testing today with the test case. The mapfile as downloaded will
>> give you GD output, for the
>> world. If you adjust the extent to match the states shapefile and the switch
>> the renderer to AGG you
>> get something very close to the sample. My findings:
>>
>> On line thickness.
>>
>> AGG renders 1 pixel outline like the sample, it's simply a bit thicker. As
>> MapServer sits we support only
>> integer SIZE and WIDTH values. I mucked with the code today and changed both
>> of those to doubles
>> and with that change you can set "WIDTH .5" in a STYLE to achieve a thinner
>> outline. (see my example
>> below)
>>
>> The changes are small:
>>
>> - mapserver.h: change struct member types, min values for size and width go
>> to 0 instead of 1 (perhaps .001
>> or something like that is better)
>> - mapfile.c: change parsing to expect a double, change writing to use %g in
>> format strings
>> - mapogcsld.c: 3 spots where need to write the size so changed %d to %g in
>> format strings
>> - mapagg.cpp: the were for spots where agg was expecting an int for
>> style->width so I round (MS_NINT) the value
>>
>> The last change would be the most questionable. I can commit these changes
>> if folks are interested. I think
>> we do want to do this in some shape or form
>>
>> On missing labels:
>>
>> MS and GS render the same size label (e.g. 16) differently. MS labels are
>> larger. In the sample the larger labels
>> lead to more collisions and fewer labels on the map.
>>
>> On label position:
>>
>> GS is better here. MS currently uses a bbox midpoint test as a quick way to
>> position a label in a polygon. If the result
>> isn't in the feature then we fall back on another algorithm. In this case
>> that method results in a few poorly placed
>> labels (CA, ID for example) which lead to collisions that one might not
>> exect.
>>
>> Curiously the code to compute a centroid is right there in mapprimitive.c.
>> I'm not sure why it's not being used. I imagine
>> for performance reasons. If I use that instead of the simple bbox center we
>> get results very similar to the GS sample. On
>> Florida's location still sucks. Clearly we should provide a couple of
>> methods, perhaps letting the user choose. For regular
>> geometries (e.g. parcels) the fast method is more than adequate.
>>
>> Anyway, if I use an outline width of .5 and the centroid algorithm for
>> default placement we get something like:
>>
>> http://maps.dnr.state.mn.us/~stlime/test.png
>>
>> Steve
>>
>>>>> On 9/11/2008 at 4:51 PM, in message
>> <d2b988930809111451h114808edw7afb3b2bd91936ef at mail.gmail.com>, "thomas
>> bonfort"
>> <thomas.bonfort at gmail.com> wrote:
>>> I may have missed something, but it seems to me from the mapfile that
>>> that output is gd rendered. The image seems to be a screenshot from
>>> images pasted in a spreadsheet, and it looks as if there's some
>>> softening coming from somewhere.
>>>
>>>> I'm not sure I believe the gs folks when they say their width is 1px,
>>>> it almost looks like less... I'd be interested to know if a 0.5 width
>>>> line on the trunk ms results in a similar quality of border.
>>> there's no possibility yet to set fractional line widths in mapserver.
>>>
>>> An area where ms is way ahead of gs is in rendering linear data, as
>>> the gs renderer has some recurrent artifacts, eg
>>> http://sigma.openplans.org/geowebcache/service/wms?SRS=EPSG%3A900913&LAYERS=g
>> s%3Ahomepage&FORMAT=image%2Fpng&TILED=true&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMa
>>
>> p&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&BBOX=-8237621.092929687,496
>>
>>> 6872.681484375,-8237468.21890625,4967025.555507813&WIDTH=256&HEIGHT=256
>>> _______________________________________________
>>> 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
> _______________________________________________
> mapserver-dev mailing list
> mapserver-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-dev
More information about the mapserver-dev
mailing list