Srpski fontovi na rendering serveru

Pre skoro godinu dana, korisnik Jovan je pitao na forumu kako da rešimo problem srpskih fontova (slovolika) na OSM-u. Naime, neka slova, naročito u kurzivu izgledaju kao ruska slova, a ne srpska („b”, „p”, „t”, „d”…). Nažalost, iako podrška za srpske fontove postoji, kao što se može videti sa Peđinog bloga, kao i komentara sa tog bloga, na OpenStreetMap serverima i dalje se renderuje ruska verzija slova u kurzivu – to je prosto zato što rendering server ne može da zna da li treba da renderuje srpsku ili rusku ćirilicu.

Podrazumevani font koji dolazi uz „openstreetmap-carto” stil – Noto Sans, definitivno ima podršku za srpska slova. Ovo je lako proveriti. Otvorite Word ili OpenOffice Writer, odaberite ovaj font i otkucajte mala slova u kurzivu. Sada menjajte jezik pasusa sa srpskog na engleski (ili bilo koji drugi jezik) i primetite kako se mala kurzivna slova menjaju kako Writer primećuje da se menja jezik. Dakle, Noto Sans font nije problem, on ima u sebi srpske verzije slova, problem je do Mapnik renderinga.

Pošto sam se uverio da ne postoji podešavanje kojim se može podesiti „locale” prilikom iscrtavanja fontova (zato što Mapnik-ov element „TextSymbolizer” prosto nema podršku za to (kao što se vidi ovde), odlučio sam se da prost promenimo font u renderingu i vidim na šta će to da liči. Ovo rešenje će raditi samo za rasterske slike, tj. nevektorske karte, kakva je OpenStreetMap karta. Dobri fontovi koji imaju podršku za srpska kurzivna slova (tako što ignorišu „locale” i uvek iscrtavaju srpska slova) se mogu naći na sajtu http://www.tipometar.org/. Ovo nije najbolji način da se napravi font, ali nama je jedini moguć. Po mom laičkom mišljenju, da bi se dobio dobar izgled karte, treba tražiti sanserifne fontove („Sans”), i koliko sam ih isprobao, najbolje mi je izgledao font „Resavska BG” Evo prigodnog primera kako izgleda iscrtavanje mape na primerima slova „d”, „b” i „t” (kliknite na sliku da je vidite u punoj veličini):

Pre:Posle:A evo i kako bi izgledao rendering celog Beograda ako bi se išlo sa ovim fontom (klik za punu veličinu):

Kako podesiti server

Pretpostavlja se da koristite Mapnik za renderovanje sličica (tile-ova), kao i možda „openstreetmap-carto” za definisanje stila, kao i da ste na Linux-u. Sve lokacije fajlova u daljem tekstu će biti iste kao i sa ovog vodiča za dizanje tile servera. Prvo treba preuzeti željeni font i instalirati ga (možda baš sa http://www.tipometar.org/). Pazite da font morate instalirati u „/usr/share/fonts”. Ostale varijante (u „~/.local/share/fonts” ili u „/usr/local/share/fonts”) ne piju vodu pošto Mapnik ne gleda te lokacije! Ja inače nisam imao uspeha sa .otf fontovima, već su mi radili samo .ttf fontovi. Da biste se uverili da Mapnik može da vidi vaš font, otkucajte nešto ovako:

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

U spisku iznad treba da ima i vašeg novoinstaliranog fonta.

Kada imate font, a ako koristite „openstreetmap-carto”, izmenite fajl „style/fonts.mms” da uključi ovaj font kao prvi izbor. Potrebno ga je uključiti i za kurziv. Diff fajl bi izgledao nekako ovako:

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;

Ponovo regenerišite „mapnik.xml” komandom „carto project.mml > mapnik.xml” (ova komanda treba da vam bude poznata od ranije – ako nije, moguće da radite nešto pogrešno) i onda restartujte „renderd” servis (npr. sa „sudo /etc/init.d/renderd restart”), i obrišite sve postojeće tile-ove (npr. sa „rm -rf /var/lib/mod_tile/ajt/”). Trebalo bi da dobijete novi font pri ponovom renderovanju karte.

Ukoliko ne koristite „openstreetmap-carto” već samo čisti Mapnik, ili Mapnik u nekoj drugoj varijanti, potrebno je da nađete vaš „mapnik.xml” fajl (njegovu lokaciju treba da možete da vidite u fajlu „/usr/local/etc/renderd.conf” pod XML unosom) i da u njemu, negde na početku dodate vaše fontove. Skupovi fontova su obično negde na početku i definisani su u „” XML elementu. Dodajte novi font u sve te elemente (pazite gde se traži podebljan, gde kurziv, a gde običan font) i opet restartujte „renderd” servis i očistite stare sličice.

Uživajte u srpskim slovima!:)

Ostavite odgovor

Vaša adresa e-pošte neće biti objavljena.Neophodna polja su označena *