[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