Postgis : ST_Buffer, ou… ?

Bonjour, et merci à Bruno et Christian pour leurs réponses précédentes. Voici une question de plus.
Le placement d’étiquettes dans des zones se fait relativement bien quand la zone est question est « relativement » convexe. Ça se complique quand la zone présente des concavités, ou l’étiquette est parfois centrée sur une bordure.
Pour éviter cela, j’ai cherché une fonction du type : point intérieur le plus éloigné des bordures, j’ai pas trouvé grand chose, à part le ST_Buffer avec un buffer négatif.
Dans l’idée, ça marche pas mal, sauf quand on gère des éléments de surface très différentes, où un buffer trop petit ne sert pas à grand chose, et un buffer trop grand fait disparaitre certaines zones. Si ces zones disparaissent, l’étiquette n’est plus rendue.
Connaissez-vous une solution miracle à ce problème ?
Merci,
JB.

Salut JB,
Pas eu l’occasion de tester moi-même, mais tu as peut-être une piste à creuser du côté de :
http://postgis.org/docs/ST_PointOnSurface.html

vincent

Salut Vincent,
J’avais vu ça, effectivement. Mais je crains que ce soit justement ce qui est utilisé actuellement pour placer les étiquettes quand on opte pour : text-placement=interior, qui va chercher quelque chose comme le point de la surface le plus proche du centre de gravité.
JB.

text-placement: interior est géré par mapnik, pas par postgis, c’est à dire que si on passe un polygone à mapnik celui-ci va calculer l’endroit où placer le texte (sans postgis).

Je ne sais pas comment Mapnik choisit la position correspondante, mais ça ressemble plus à un ST_Centroid qu’à un ST_PointOnSurface.

Bien vu, Christian ! J’y avais absolument pas pensé.
Et effectivement, dans la plupart des cas, ST_PointOnSurface s’en sort mieux que le choix par défaut de Mapnik.
JB.
(Et demain ou bientôt, j’arrive à la charge avec les xml tilemill pour mapnik…)