Hello, Just for the [email protected] list: this is Mapnik patch, it is not intended to be applied on ocitysmap or maposmatic.
Thomas Le Mon, 26 Mar 2012 16:49:50 +0200, Thomas Petazzoni <[email protected]> a écrit : > From: Thomas Petazzoni <[email protected]> > > Mapnik is current using context.set_matrix() to modify the Cairo > transformation matrix to render markers at the right location and with > the right angle on the map. This is typically used to render one-way > arrows with the MapQuest stylesheet. > > Unfortunately, context.set_matrix() completely _overrides_ the > existing Cairo transformation matrix instead of making an _additional_ > transformation to it. However, in MapOSMatic > (http://www.maposmatic.org), for our map-rendering needs, we pass to > Mapnik a Cairo surface on which we have already applied a > translation+scaling transformation. The usage of .set_matrix() by > Mapnik completely overrides this transformation, with the result of > having completely misplaced one-way arrows. > > By using context.transform(), then the transformation matrix is > applied on _top_ of the current one, which fixes the rendering. Now, > the one-way arrows are at the right locations on our translated+scaled > Cairo surface. > > Thanks to Gaël Utard <[email protected]> for his help in debugging > this problem. > > Signed-off-by: Thomas Petazzoni <[email protected]> > --- > src/cairo_renderer.cpp | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/src/cairo_renderer.cpp b/src/cairo_renderer.cpp > index 589247e..12f6277 100644 > --- a/src/cairo_renderer.cpp > +++ b/src/cairo_renderer.cpp > @@ -1269,7 +1269,7 @@ void cairo_renderer_base::start_map_processing(Map > const& map) > double x, y, angle; > while (placement.get_point(&x, &y, &angle)) { > Cairo::Matrix matrix = Cairo::rotation_matrix(angle) * > Cairo::translation_matrix(x,y) ; > - context.set_matrix(matrix); > + context.transform(matrix); > context.add_path(arrow_); > } > } -- Thomas Petazzoni, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com
