A noter que ce serait pas mal que Mapnik supporte directement dans ses
feuilles de style XML la possibilité de préciser le côté de l'épaisseur de
ligne qu'on veut afficher (par défaut il affiche les deux côtés,
moitié-moitié à cheval sur le ligne virtuelle), on devrait pouvoir indiquer
une option "both" (valeur par défaut actuelle), "inner" ou "outer"  (pour
ne représenter que la moitié interne ou externe du polygone), ou "left" ou
"right" (en fonction du sens de parcours, sur les éléments linéaires non
surfaciques).

Le code ci-dessus (qui étend le clipping de la moitié de l'épaisseur de
ligne pourqu'elle reste visible en totalité) devrait être désactivé si on
ne représente que la partie interne, et dans ce cas il suffirait de mettre
clip=false dans l'attribut de style de ligne (mais cela a un effet de bord
car il n'est pas fait pour que pour ça).

Intérêt: pouvoir afficher aussi le long d'une route un coté "remarquable"
comme sur les cartes Michelin pour les routes touristiques, ou pour créer
des ombres autour de bâtiments à mettre en valeur (mais pas dedans). Ou
encore pour marquer les bons côtés où il y a une piste cyclable, une voie
de bus, ou du stationnement autorisé, ou le côté où il y a une barrière de
sécurité, ou un fossé.


Le 9 juin 2013 19:52, Philippe Verdy <verd...@wanadoo.fr> a écrit :

> Et en pratique ce support est intégré dans le LineSymbolizer:
>
>
> if (sym.clip())
>
>     {
>
>         double padding = (double)(query_extent_.width()/width_);
>
>         double half_stroke = stroke_.get_width()/2.0;
>
>         if (half_stroke > 1)
>
>             padding *= half_stroke;
>
>         if (std::fabs(sym.offset()) > 0)
>
>             padding *= std::fabs(sym.offset()) * 1.2;
>
>         padding *= scale_factor_;
>
>         clipping_extent.pad(padding);
>
>     }
>
>
> voir https://github.com/mapnik/mapnik/blob/master/src/cairo_renderer.cpp
>
> Bref on fait le rendu avec les attributs offset et width donnés dans la
> feuille de style pour le LineSymbolizer, le reste c'est le rendu PNG de
> Cairo (ou le rendu en SVG) qui se débrouille pour calculer les buffers
> corrects (et je pense même que ce sera bien plus performant que tes
> symboles marqueurs en répétés en "pattern" sur une distance de 1 pixel le
> long d'une ligne, la technique qui ne sert en pratique qu'à dessiner les
> triangles le long des traits de falaises à distance régulière).
>
> Peut-être qu'il faut bidouiller le code C++ de Mapnik pour activer la
> bonne combinaison d'options, mais tout y est pour supporter ça, et ensuite
> pouvoir l'utiliser dans la feuille de style XML.
>
>
_______________________________________________
Talk-fr mailing list
Talk-fr@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-fr

Répondre à