Suite

Mapnik TextSymbolizer n'affichant rien au-dessus de la couche de base OpenStreetMap


J'essaie d'utiliser Python pour créer un TextSymbolizer pour afficher un nom de piste au-dessus de la piste LineSymbolizer. Sous cette couche se trouve la couche de base OSM qui contient ses propres données pour ce sentier.

Je peux afficher la ligne mais je ne peux afficher aucun texte. Je suis à court d'idées, Google s'avère infructueux donc je suis à la recherche de nouvelles idées, si je peux me permettre.

J'ai compilé Mapnik avec le débogage activé uniquement pour constater qu'il n'y a pas de journalisation à proximité du code de symbolisation de texte. J'ai essayé gdb mais je n'ai pas passé assez de temps à apprendre à déboguer de python dans la bibliothèque partagée Mapnik. Si quelqu'un a des indications sur la façon de procéder, je lui en serais reconnaissant. Je suis assez content de déboguer mais je ne connais pas gdb.

J'ai également modifié le fichier osm.xml et supprimé les pistes et les noms de piste qui pourraient interférer avec le TextSymbolizer, mais je n'ai vu aucune différence.

Code pertinent :

imgx = 400 imgy = 400 m = mapnik.Map(imgx,imgy) m.buffer_size = 1000 workoutParams = dict(host='localhost',port='5432',user='postgres',password='password',dbname ='postgis') workoutParams['estimate_extent'] = False workoutParams['extent']='-180,-89.99,180,89.99' workoutTable = "(select id, geometry, 'vraiment long trail name' as trail_name from pub_trail_segment où pub_trail_id = %s) as route" % idNumber workoutParams['table']= workoutTable workDatasource = PostGIS(**workoutParams) workoutLayer = Layer('route','+proj=latlong +datum=WGS84') workoutLayer.datasource = workoutDatasource workoutStyle = mapnik.Style() segmentStyleRule = mapnik.Rule() segmentStyleRule.symbols.append(mapnik.LineSymbolizer(mapnik.Color('blue'),1)) #50 pour imprimer segmentTextSymbolizer = mapnik.TextSymbolizer('trail_name' , 'book-fonts', 20, mapnik.Color('blue')) segmentTextSymbolizer.halo_radius = 1 segmentTextSymbolizer.label_placement = mapnik.label_placement.LINE_PLACEMENT segmentTextSymbolizer.allow_overlap = True segmentTextSymbolizer.avoid_edges = False segmentStyleRule.symbols.append(segmentTextSymbolizer) trainingStyle.rules.append(segmentStyleRule) m.append_style('route',workoutStyle) workoutLayer.styles.append('route') m.workLayer.append('route',workoutStyle) ) m.zoom_to_box(bbox) im = mapnik.Image(imgx,imgy) mapnik.render(m, im)

Qu'est-ce que je fais mal?

Merci beaucoup pour toutes idées

Trans-publié sur StackOverflow


Deux options : créez un deuxième objet de style et attachez le symboliseur de texte à ce style, puis ajoutez ce deuxième style au calque. Les calques dans Mapnik peuvent accepter n'importe quel nombre de styles et les rendront dans l'ordre attaché, donc si vous attachez un second style avec des règles de texte, ils seront rendus en second. Cependant, dans le cas des polygones avec du texte, la plupart des gens vont plus loin et créent un deuxième calque avec son propre style contenant des règles de texte. Cela garantira que tout le texte est rendu après tous d'autres géométries sont rendues.


Le problème était cette partie dans l'élément PostGIS

'nom de piste vraiment long' comme trail_name

Mapnik semblait avoir un problème avec ça. Lorsque je l'ai remplacé par la jointure appropriée, le nom s'est affiché.