[OpenLayers-Users] Multiple labels on the same polygon

Tim Schaub tschaub at opengeo.org
Tue Oct 28 00:52:48 EDT 2008


Hey-

Lehtonen, Mika wrote:
> Hi,
> 
> I am trying to do some labels on polygons which are in an overlay layer 
> on top of Google Map base layer. The polygon data is served through WMS 
> (Geoserver). Labels are produced in GeoServer using its own style 
> definition (TextSymbolizer). The problem is that larger polygons get 
> more than one label on them. I would prefer them to have exactly one per 
> polygon. If I test the polygon layer with Geoserver's OL preview, 
> everything is just like I would want it to be. But my html page is 
> something else.
> 

Regarding labels, your WMS layer probably uses multiple tiles (unless 
you set singleTile to true).  With multiple tile requests, the server 
treats each as independent, so it will faithfully label as many polygons 
as the tile bounds intersect.

A good solution for nicely labeled tiles that improves performance is to 
use something that creates meta-tiles (big tiles that are sliced into 
smaller ones) and caches your rendered tiles.  Both TileCache and 
GeoWebCache will do this for you.

If you have data that changes frequently - or some other reason not to 
cache tiles on the server - you can use the non-standard TILED and 
TILESORIGIN parameters in your WMS request.  This tells GeoServer that 
multiple requests are coming in for tiles, and it figures out which 
polygons to label.

See these two examples:
  http://tinyurl.com/tiledfalse (TILED=false)
  http://tinyurl.com/tiledtrue (TILED=true)

Read the bit on "On the fly meta tiler":
http://geoserver.org/display/GEOSDOC/WMS+vendor+parameters#WMSvendorparameters-TILED

Also, view the source of your GeoServer layer preview to see the use in 
an OpenLayers page.

> I also noticed that the scale in my page when compared to scale in the 
> OL preview, is different. However, the SLD seem to be obeying the scale 
> value although the real map scale is different. Could that differ be the 
> key to my problems?

OpenLayers assumes a display resolution of 72 dots per inch by default. 
  This is almost always wrong (but an app designer has no way of knowing).

The SLD spec says the following:

The "standardized rendering pixel size" is defined to be 0.28mm × 0.28mm 
(millimeters).

Which (as it admits) is frequently wrong (and generally unknown by the 
server).  But, at least it is a standard.

The GeoServer layer preview sets the OpenLayers.DOTS_PER_INCH constant 
to match the SLD "standardized rendering pixel size."  You can do this 
as well in your application:

OpenLayers.DOTS_PER_INCH = 25.4 / 0.28;

> 
> I will deliver further information if needed. OL is either 2.7 or the 
> one delivered with Geoserver 1.7.0.
> 

None of the above will be different with any 2.x version of OpenLayers. 
  But it looks like OpenLayers 2.7 got in to GeoServer 1.7 
(http://jira.codehaus.org/browse/GEOS-2279).

Good luck,
Tim

> - mika -
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users


-- 
Tim Schaub
OpenGeo - http://opengeo.org
Expert service straight from the developers.



More information about the Users mailing list