Српски фонтови на рендеринг серверу

Пре скоро годину дана, корисник Јован је питао на форуму како да решимо проблем српских фонтова (словолика) на OSM-у. Наиме, нека слова, нарочито у курзиву изгледају као руска слова, а не српска („б”, „п”, „т”, „д”…). Нажалост, иако подршка за српске фонтове постоји, као што се може видети са Пеђиног блога, као и коментара са тог блога, на OpenStreetMap серверима и даље се рендерује руска верзија слова у курзиву – то је просто зато што рендеринг сервер не може да зна да ли треба да рендерује српску или руску ћирилицу.

Подразумевани фонт који долази уз „openstreetmap-carto” стил – Noto Sans, дефинитивно има подршку за српска слова. Ово је лако проверити. Отворите Word или OpenOffice Writer, одаберите овај фонт и откуцајте мала слова у курзиву. Сада мењајте језик пасуса са српског на енглески (или било који други језик) и приметите како се мала курзивна слова мењају како Writer примећује да се мења језик. Дакле, Noto Sans фонт није проблем, он има у себи српске верзије слова, проблем је до Mapnik рендеринга.

Пошто сам се уверио да не постоји подешавање којим се може подесити „locale” приликом исцртавања фонтова (зато што Mapnik-ов елемент „TextSymbolizer” просто нема подршку за то (као што се види овде), одлучио сам се да прост променимо фонт у рендерингу и видим на шта ће то да личи. Ово решење ће радити само за растерске слике, тј. невекторске карте, каква је OpenStreetMap карта. Добри фонтови који имају подршку за српска курзивна слова (тако што игноришу „locale” и увек исцртавају српска слова) се могу наћи на сајту http://www.tipometar.org/. Ово није најбољи начин да се направи фонт, али нама је једини могућ. По мом лаичком мишљењу, да би се добио добар изглед карте, треба тражити сансерифне фонтове („Sans”), и колико сам их испробао, најбоље ми је изгледао фонт „Resavska BG” Ево пригодног примера како изгледа исцртавање мапе на примерима слова „д”, „б” и „т” (кликните на слику да је видите у пуној величини):

Пре:После:А ево и како би изгледао рендеринг целог Београда ако би се ишло са овим фонтом (клик за пуну величину):

Како подесити сервер

Претпоставља се да користите Mapnik за рендеровање сличица (tile-ова), као и можда „openstreetmap-carto” за дефинисање стила, као и да сте на Linux-у. Све локације фајлова у даљем тексту ће бити исте као и са овог водича за дизање tile сервера. Прво треба преузети жељени фонт и инсталирати га (можда баш са http://www.tipometar.org/). Пазите да фонт морате инсталирати у „/usr/share/fonts”. Остале варијанте (у „~/.local/share/fonts” или у „/usr/local/share/fonts”) не пију воду пошто Mapnik не гледа те локације! Ја иначе нисам имао успеха са .otf фонтовима, већ су ми радили само .ttf фонтови. Да бисте се уверили да Mapnik може да види ваш фонт, откуцајте нешто овако:

$ python3
>>> from mapnik import FontEngine
>>> print('\n'.join(list(FontEngine.face_names())))

У списку изнад треба да има и вашег новоинсталираног фонта.

Када имате фонт, а ако користите „openstreetmap-carto”, измените фајл „style/fonts.mms” да укључи овај фонт као први избор. Потребно га је укључити и за курзив. Diff фајл би изгледао некако овако:

diff --git a/style/fonts.mss b/style/fonts.mss
index 1027025..f0e43e0 100644
--- a/style/fonts.mss
+++ b/style/fonts.mss
@@ -75,7 +75,11 @@ support SBIT TTF.
/*
A regular style.
*/
-@book-fonts: "Noto Sans Regular",
+@book-fonts: "Resavska BG Sans",
+ "Noto Sans Regular",
"Noto Sans CJK JP Regular",
"Noto Sans Adlam Regular",
"Noto Sans Adlam Unjoined Regular",
@@ -152,7 +156,11 @@ A regular style.
A bold style is available for almost all scripts. Bold text is heavier than
regular text and can be used for emphasis. Fallback is a regular style.
*/
-@bold-fonts: "Noto Sans Bold",
+@bold-fonts: "Resavska BG Sans Bold",
+ "Noto Sans Bold",
"Noto Sans CJK JP Bold",
"Noto Sans Armenian Bold",
"Noto Sans Bengali UI Bold",
@@ -189,4 +197,9 @@ regular text and can be used for emphasis. Fallback is a regular style.
Italics are only available for the base font, not the other scripts.
For a considerable number of labels this style will make no difference to the regular style.
*/
-@oblique-fonts: "Noto Sans Italic", @book-fonts;
+@oblique-fonts: "Resavska BG Sans Italic",
+ "Noto Sans Italic",
+ @book-fonts;

Поново регенеришите „mapnik.xml” командом „carto project.mml > mapnik.xml” (ова команда треба да вам буде позната од раније – ако није, могуће да радите нешто погрешно) и онда рестартујте „renderd” сервис (нпр. са „sudo /etc/init.d/renderd restart”), и обришите све постојеће tile-ове (нпр. са „rm -rf /var/lib/mod_tile/ajt/”). Требало би да добијете нови фонт при поновом рендеровању карте.

Уколико не користите „openstreetmap-carto” већ само чисти Mapnik, или Mapnik у некој другој варијанти, потребно је да нађете ваш „mapnik.xml” фајл (његову локацију треба да можете да видите у фајлу „/usr/local/etc/renderd.conf” под XML уносом) и да у њему, негде на почетку додате ваше фонтове. Скупови фонтова су обично негде на почетку и дефинисани су у „<FontSet>” XML елементу. Додајте нови фонт у све те елементе (пазите где се тражи подебљан, где курзив, а где обичан фонт) и опет рестартујте „renderd” сервис и очистите старе сличице.

Уживајте у српским словима!:)

Оставите одговор

Ваша адреса е-поште неће бити објављена. Неопходна поља су означена *