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 à