Mapnik XML stroke-width

I’d like to make some maps where when I really zoom in the roads are rendered at the actual width.

I think I’ve figured out a SQL select statement to get pixel width values based on the width=* tag if it exists, or estimate it from lanes=* tag if that exists or from assumptions about the number of lanes and lane width from values of highway=* as a last resort.

But now I don’t see how to tell the renderer about it. The typical rendering rule is something like:

<Rule>
    <Filter>
        (([highway] = 'residential') or
         ([highway] = 'unclassified'))
    </Filter>
    <LineSymbolizer
        stroke="rgb(169,170,153)"
        stroke-width="8"
        stroke-linecap="round"
        smooth="0.7"
    />
</Rule>

When I try putting a SQL select field value after the stroke-width= it rejects it. I’ve tried


stroke-width="[pixel_width]"
stroke-width="pixel_width"
stroke-width=[pixel_width]
stroke-width=pixel_width

Where pixel_width is the results of my SQL select’s calculation. The first two return and error message indicating that a number was expected. The latter two are invalid XML and are reported as such.

I guess if I back off from trying to do actual width properly scaled and just do lanes then I can setup a rule for each of the expected number of lanes and have the lane width in pixels hard coded for each zoom. But it seems I ought to be able to render a line with a width based on the width value someone has surveyed. Or in the case of using lanes, support an arbitrary number of lanes.

Any ideas?

I leave it here just in case one comes across same problem
https://github.com/mapnik/mapnik/issues/828#issuecomment-48686925