OpenLayers con MapServer WMS
Il problema delle label
Con le impostazioni predefinite MapServer posiziona le label con algoritmi euristici per evitare sovrapposizioni, inoltre le etichette potrebbero risultare troncate al bordo dell'immagine. Questo crea non pochi problemi se si utilizza il meccanismo delle tile tipico di OpenLayers: in coincidenza con il bordo di ciascuna tile le etichette possono risultare troncate, duplicate o assenti del tutto.
Putroppo non esiste una soluzione definitiva a questo problema. In alcuni casi risulta accettabile disattivare il meccanismo di tiling (e di conseguenza il caching delle stesse tile), impostando l'opportuna opzione nel costruttore del layer:
var new_ol_wms = new OpenLayers.Layer.WMS( "WMS", "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}, { singleTile: true, ratio: 1 } );
In alternativa si possono aggiustare i seguenti parametri del MAP file:
MAP.WEB.METADATA.labelcache_map_edge_buffer -4 | Lascia un margine di 4 pixel privo di etichette al bordo di ogni tile. |
---|---|
MAP.LAYER.CLASS.LABEL.POSITION cc | Posiziona l'etichetta al centro della feature invece di usare l'algoritmo automatico. |
MAP.LAYER.CLASS.LABEL.PARTIALS false | Impedisce la stampa di etichette troncate. Richiede che FORCE sia impostato a false. |
MAP.LAYER.CLASS.LABEL.FORCE false | Se impostato a true impone che l'etichetta sia stampata comunque (eventualmente troncata). |
Verificare la direttiva LABEL_NO_CLIP
, da aggiungere a livello del layer:
LAYER PROCESSING "LABEL_NO_CLIP=ON" ...
dovrebbe obbligare la posizione della label rispetto alla feature, piuttosto che tentare un posizionamento automatico. Questo dovrebbe essere risolutivo!