Le mardi 1 février 2011 15:20:05 Maurice, vous avez écrit : > Sensible à l'avis d'un cartographe, je remarque deux graves manquements > sur ta carte: > 1) l'orientation, même si on peut supposer le nord par défaut en haut de la > carte; > 2) l'échelle, indispensable.
Je te l'accorde, mais ça faisait pas partie de la demande :-) J'ai fait d'autres plans avec ces informations complémentaires http://osm.dumoulin63.net/rendus/fub2011.zip Pour générer l'échelle, voici mon code (pas encore documenté, mais une doc est à venir encore une fois) : # constant used to convert from metres (i.e. map units) to points (i.e. screen/paper units) # (72 points per inch, 1/2.54 inches per cm) see http://oliverobrien.co.uk/2010/03/map-adornments-with-cairo/ S2P=72/0.0254 factor=2 def myCairoDraw(m, map_uri, imgx, imgy): # With cairo import cairo, math surface = cairo.ImageSurface (cairo.FORMAT_ARGB32, imgx, imgy) ctx = cairo.Context(surface) mapnik.render(m, ctx) legendW=550*factor legendH=150*factor ctx.translate (imgx-legendW, imgy-legendH) # Frame pat = cairo.LinearGradient (0.0, 0.0, 0.0, 150.0) pat.add_color_stop_rgba (1, 0.8, 0.8, 0.8, 0.5) # First stop, 50% opacity pat.add_color_stop_rgba (0, 1, 1, 1, 1) # Last stop, 100% opacity ctx.rectangle (0, 0, legendW, legendH) # Rectangle(x0, y0, x1, y1) ctx.set_source (pat) ctx.fill () ctx.set_source_rgb(0.2, 0.2, 0.2) ctx.select_font_face("Georgia", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD) ctx.translate(50*factor,0) # Title ctx.translate(0,40*factor) ctx.move_to(0, 0) ctx.set_font_size(14*factor) ctx.show_text("Congrès de la FUB 2011 − Clermont-Ferrand") ctx.set_font_size(12*factor) # Scale ctx.translate(0,40*factor) drawScale(ctx, 270*factor,m.scale_denominator()) # Orientation ctx.save() ctx.translate(350*factor, 0) ctx.set_font_size(16*factor) ctx.move_to(0,0) ctx.show_text("N") ctx.set_font_size(12*factor) ctx.translate(30*factor, 0) ctx.set_line_width(1*factor) ctx.move_to(0, -20*factor) ctx.line_to(10*factor, 10*factor) ctx.line_to(0, 5*factor) ctx.line_to(-10*factor, 10*factor) ctx.close_path() ctx.fill() ctx.restore() # Attribution text ctx.translate(0,40*factor) ctx.move_to(0, 0) ctx.show_text("Données © OpenStreetMap et ses contributeurs CC-By-SA-2.0") surface.write_to_png (map_uri) def drawScale(ctx, length, scale): scaleMeters=length/scale*S2P divider=1; while (scaleMeters/divider > 10): divider = divider * 10; maxMeters=int(scaleMeters)/divider*divider maxScaleLength = maxMeters*scale/S2P #print str(scale)+" "+str(270/scale*S2P)+" "+str(divider)+" "+str(maxMeters)+" "+str(maxScaleLength) ctx.set_line_width(3*factor) ctx.move_to(0, 10*factor) ctx.line_to(maxScaleLength, 10*factor) ctx.stroke() drawScaleTick(ctx, ctx.get_line_width()) drawScaleTick(ctx, maxScaleLength/2) drawScaleTick(ctx, maxScaleLength) ctx.move_to(-10*factor, 0) ctx.show_text("0") ctx.move_to(maxScaleLength/2-20*factor, 0) ctx.show_text(str(maxMeters/2)+"m") ctx.move_to(maxScaleLength-20*factor, 0) ctx.show_text(str(maxMeters)+"m") def drawScaleTick(ctx, position): ctx.move_to(position-ctx.get_line_width()/2, 10*factor) ctx.line_to(position-ctx.get_line_width()/2, 5*factor) ctx.stroke() -- Nicolas Dumoulin http://wiki.openstreetmap.org/wiki/User:NicolasDumoulin _______________________________________________ Talk-fr mailing list [email protected] http://lists.openstreetmap.org/listinfo/talk-fr

