Бештар

Mapnik TextSymbolizer дар қабати асосии OpenStreetMap чизе нишон намедиҳад


Ман кӯшиш мекунам Python -ро барои сохтани TextSymbolizer истифода барам, то номи пайроҳаро дар болои хат LineSymbolizer нишон диҳам. Дар зери ин қабат қабати пойгоҳи OSM мавҷуд аст, ки дорои маълумоти шахсии ин пайроҳа мебошад.

Ман сатрро намоиш дода метавонам, аммо ман ягон матнро намоиш дода наметавонам. Ман ақидаҳоямро тамом кардам, Google бенатиҷа аст, бинобар ин, агар ман ҷасур бошам, ғояҳои нав меҷӯям.

Ман Mapnik -ро тартиб додам, ки дебаги он танҳо фаъол аст, то бубинам, ки дар наздикии рамзи символизатори матн сабт вуҷуд надорад. Ман бо gdb рафтам, аммо ман вақти кофӣ надоштам, то аз питон ба китобхонаи муштараки Mapnik ислоҳ кунам. Агар касе роҳнамоеро дар бораи ин кор дошта бошад, ман миннатдорам. Ман барои ислоҳ кардан кофӣ хушбахтам, аммо ман бо gdb шинос нестам.

Ман инчунин osm.xml -ро таҳрир кардам ва роҳҳо ва номҳои пайроҳаро, ки метавонанд ба TextSymbolizer халал расонанд, гирифтам, аммо ҳеҷ фарқиятро надидаам.

Рамзи дахлдор:

imgx = 400 imgy = 400 m = mapnik.Map (imgx, imgy) m.buffer_size = 1000 машқParams = dict (host = 'localhost', port = '5432', user = 'postgres', password = 'password', dbname = 'postgis') workoutParams ['smate_extent'] = WorkoutParams ['миқёс'] = '-180, -89.99,180,89.99' workoutTable = "(id, геометрия, 'номи ҳақиқии дарозро' ҳамчун trail_name аз pub_trail_segment ки pub_trail_id = % s) ҳамчун масири " % idNumber workoutParams ['table'] = workoutTable workoutDatasource = 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 for segment segmentTextSymbolizer = mapnik.TextSymbolizer , 'book-fonts', 20, mapnik.Color ('blue')) segmentTextSymbolizer.halo_radius = 1 сегментTextSymbolizer.label_placement = mapnik.label_placement.LINE_PLACEMENT сегментиTextSymbolizer.allow_overlap = Ҳақиқӣ segmentTextSymbolizer.avoid_edges = segmentseStyleRule.symbols.append (segmentTextSymbolizer) workoutStyle.rules.append (segmentStyleRule) m.append_style ('route', workoutStyle) workoutLayer.styles.append ('route') m ('route') m ) m.zoom_to_box (bbox) im = mapnik.Image (imgx, imgy) mapnik.render (m, im)

Ман чӣ кор мекунам?

Ташаккури зиёд барои ҳама гуна идеяҳо

Cros дар StackOverflow интишор карда шуд


Ду вариант: Объекти услуби дуввум созед ва рамзи матнро ба он услуб замима кунед ва он услуби дуюмро ба қабат илова кунед. Қабатҳо дар Mapnik метавонанд ҳар гуна сабкҳоро қабул кунанд ва онҳоро бо тартиби замимашуда нишон диҳанд, аз ин рӯ, агар шумо услуби дуввумро бо қоидаҳои матн замима кунед, пас онҳо дуюмбора намоиш дода мешаванд. Аммо, дар мавриди полигонҳо бо матн, аксари одамон пеш рафта, қабати дуввумро бо услуби хоси қоидаҳои матн эҷод мекунанд. Ин кафолат медиҳад, ки ҳама матн пас аз он намоиш дода мешавад ҳама геометрияҳои дигар нишон дода мешаванд.


Мушкилот ин қисм дар унсури PostGIS буд

'номи пайроҳаи воқеан дароз' ҳамчун trail_name

Чунин ба назар мерасад, ки Mapnik бо он мушкилот дорад. Вақте ки ман онро бо пайвастагии мувофиқ иваз кардам, номи намоишшуда.


Видеоро тамошо кунед: Generating your own OpenMapTiles (Октябр 2021).