Hi list,
Currently there is a problem with the WMS rendering: The server-side scale rules in SLDs are not applied properly.
This is because the scale calculation in uDig differs from the scale calculation in WMS server.
The difference is the DPI setting. In uDig it is usually 96 (depending on desktop settings).
But in WMS servers the default is rather 90 or 72 or something different.
The result is that the image coming from the server to uDig is not correctly styled.
Let's say that you view a wms layer in scale 1:20000 in uDig.
And in the SLD on the server (Geoserver) you have a rule with maximum scale denominator 19999 for some labels. So, normally you should not see the labels in the result image.
But the labels do appear. Because the scale denominator in the server is calculated with its default dpi value of 90. And results in something lower thean 20000
To the rescue comes the GetMapRequest.setVendorSpecificParameter(String name, String value)
So, to resolve this I modified the WMS renderer (BasicWMSRenderer2) to supply vendor specific parameters to send the correct dpi on the server (out of the wms spec). See my comment in related JIRA bug:
http://jira.codehaus.org/browse/UDIG-1734Furthermore I needed to supply some other
vendor specific parameters for each layer separately, namely "maxfeatures".
I modified the WMS renderer and the WMS metrics (BasicWMSMetrics2) to query these parameters from the layer's IGeoResource persistent properties.
I set some persistent properties per layer when I create the IService (like IGeoResource.getPersistentProperties().put("wms:maxfeatures", 1000).
The result works fine and all server styles are rendered properly in any uDig dpi/scale.
If you think that's a good solution I can make a patch.
I'm just kind of lost atm with the versions/branches.
Regards,
Panagiotis