<div dir="ltr">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).<div>
<br></div><div style>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).</div>
<div style><br></div><div style>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é.</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">Le 9 juin 2013 19:52, Philippe Verdy <span dir="ltr"><<a href="mailto:verdy_p@wanadoo.fr" target="_blank">verdy_p@wanadoo.fr</a>></span> a écrit :<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Et en pratique ce support est intégré dans le LineSymbolizer:<div><br></div><div><pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px"><div style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;line-height:18px;margin:0px;padding:0px 0px 0px 10px;border:0px">
<span style="margin:0px;padding:0px;border:0px;font-weight:bold">if</span> <span style="margin:0px;padding:0px;border:0px">(</span><span style="margin:0px;padding:0px;border:0px">sym</span><span style="margin:0px;padding:0px;border:0px">.</span><span style="margin:0px;padding:0px;border:0px">clip</span><span style="margin:0px;padding:0px;border:0px">())</span></div>
<div style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;line-height:18px;margin:0px;padding:0px 0px 0px 10px;border:0px"> <span style="margin:0px;padding:0px;border:0px">{</span></div>
<div style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;line-height:18px;margin:0px;padding:0px 0px 0px 10px;border:0px"> <span style="margin:0px;padding:0px;border:0px;color:rgb(68,85,136);font-weight:bold">double</span> <span style="margin:0px;padding:0px;border:0px">padding</span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">=</span> <span style="margin:0px;padding:0px;border:0px">(</span><span style="margin:0px;padding:0px;border:0px;color:rgb(68,85,136);font-weight:bold">double</span><span style="margin:0px;padding:0px;border:0px">)(</span><span style="margin:0px;padding:0px;border:0px">query_extent_</span><span style="margin:0px;padding:0px;border:0px">.</span><span style="margin:0px;padding:0px;border:0px">width</span><span style="margin:0px;padding:0px;border:0px">()</span><span style="margin:0px;padding:0px;border:0px;font-weight:bold">/</span><span style="margin:0px;padding:0px;border:0px">width_</span><span style="margin:0px;padding:0px;border:0px">);</span></div>
<div style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;line-height:18px;margin:0px;padding:0px 0px 0px 10px;border:0px"> <span style="margin:0px;padding:0px;border:0px;color:rgb(68,85,136);font-weight:bold">double</span> <span style="margin:0px;padding:0px;border:0px">half_stroke</span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">=</span> <span style="margin:0px;padding:0px;border:0px">stroke_</span><span style="margin:0px;padding:0px;border:0px">.</span><span style="margin:0px;padding:0px;border:0px">get_width</span><span style="margin:0px;padding:0px;border:0px">()</span><span style="margin:0px;padding:0px;border:0px;font-weight:bold">/</span><span style="margin:0px;padding:0px;border:0px;color:rgb(0,153,153)">2.0</span><span style="margin:0px;padding:0px;border:0px">;</span></div>
<div style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;line-height:18px;margin:0px;padding:0px 0px 0px 10px;border:0px"> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">if</span> <span style="margin:0px;padding:0px;border:0px">(</span><span style="margin:0px;padding:0px;border:0px">half_stroke</span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">></span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,153,153)">1</span><span style="margin:0px;padding:0px;border:0px">)</span></div>
<div style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;line-height:18px;margin:0px;padding:0px 0px 0px 10px;border:0px"> <span style="margin:0px;padding:0px;border:0px">padding</span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">*=</span> <span style="margin:0px;padding:0px;border:0px">half_stroke</span><span style="margin:0px;padding:0px;border:0px">;</span></div>
<div style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;line-height:18px;margin:0px;padding:0px 0px 0px 10px;border:0px"> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">if</span> <span style="margin:0px;padding:0px;border:0px">(</span><span style="margin:0px;padding:0px;border:0px">std</span><span style="margin:0px;padding:0px;border:0px;font-weight:bold">::</span><span style="margin:0px;padding:0px;border:0px">fabs</span><span style="margin:0px;padding:0px;border:0px">(</span><span style="margin:0px;padding:0px;border:0px">sym</span><span style="margin:0px;padding:0px;border:0px">.</span><span style="margin:0px;padding:0px;border:0px">offset</span><span style="margin:0px;padding:0px;border:0px">())</span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">></span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,153,153)">0</span><span style="margin:0px;padding:0px;border:0px">)</span></div>
<div style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;line-height:18px;margin:0px;padding:0px 0px 0px 10px;border:0px"> <span style="margin:0px;padding:0px;border:0px">padding</span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">*=</span> <span style="margin:0px;padding:0px;border:0px">std</span><span style="margin:0px;padding:0px;border:0px;font-weight:bold">::</span><span style="margin:0px;padding:0px;border:0px">fabs</span><span style="margin:0px;padding:0px;border:0px">(</span><span style="margin:0px;padding:0px;border:0px">sym</span><span style="margin:0px;padding:0px;border:0px">.</span><span style="margin:0px;padding:0px;border:0px">offset</span><span style="margin:0px;padding:0px;border:0px">())</span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">*</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,153,153)">1.2</span><span style="margin:0px;padding:0px;border:0px">;</span></div>
<div style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;line-height:18px;margin:0px;padding:0px 0px 0px 10px;border:0px"> <span style="margin:0px;padding:0px;border:0px">padding</span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">*=</span> <span style="margin:0px;padding:0px;border:0px">scale_factor_</span><span style="margin:0px;padding:0px;border:0px">;</span></div>
<div style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;line-height:18px;margin:0px;padding:0px 0px 0px 10px;border:0px"> <span style="margin:0px;padding:0px;border:0px">clipping_extent</span><span style="margin:0px;padding:0px;border:0px">.</span><span style="margin:0px;padding:0px;border:0px">pad</span><span style="margin:0px;padding:0px;border:0px">(</span><span style="margin:0px;padding:0px;border:0px">padding</span><span style="margin:0px;padding:0px;border:0px">);</span></div>
<div style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;line-height:18px;margin:0px;padding:0px 0px 0px 10px;border:0px"> <span style="margin:0px;padding:0px;border:0px">}</span></div>
</pre></div><div class="gmail_extra"><br>voir <a href="https://github.com/mapnik/mapnik/blob/master/src/cairo_renderer.cpp" target="_blank">https://github.com/mapnik/mapnik/blob/master/src/cairo_renderer.cpp</a><br><br>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).</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">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.</div>
<div class="gmail_extra"><br></div></div>
</blockquote></div><br></div>