[MaaStep] OpenStreetMapでの文字化けの解消法

MaaSネタが続きます。石川です。

前回の記事でOpenStreetMapを構築しました。

早速ですが、構築したものをleafletから呼び出してみます。

>大量の豆腐(日本語が□に化けたもの)<

これじゃ使い物にならないので直します。

原因

この現象の原因は以下の通りです

  • 日本語を表示できるフォントがインストールされていない
  • フォントはインストールされているが指定されていない

サーバー側でフォントが必要になるのは地形情報や道路情報をデータベースから読み出し、文字を重ねて画像をレンダリングしているからです。 クライアント側ではどうしようもないのでサーバー側で解決してあげる必要があります。

解決策

原因がわかっているので解決法は単純です。

  • 日本語が表示できるフォントをインストールする
  • 適切に呼び出されるようにフォントの指定を行う

簡単ですね。

設定

環境にインストールされているフォントを調べないことには始まりません。

(前回同様 Ubuntu 16.04 上での実行例になります。他環境の場合置き換えて読み進めていただけると幸いです。)

ubuntu@VM-OpenStreetMap:~$ ls -l /usr/share/fonts/truetype/ (renderd.conf内のfont_dirで設定されたパス)
total 8
drwxr-xr-x 2 root root 4096 Jun 18 07:08 dejavu
drwxr-xr-x 2 root root 4096 Jun 18 07:11 ttf-dejavu

DejaVu系のフォントしか入ってないですね。

このフォントでは日本語は表示できません。おぞましいほどの豆腐が出るはずです。

OSSな日本語表示できるフォントをダウンロードしてきましょう。 例としては

  • Takaoフォント
  • VLゴシック

あたりが使えます。他にも種類はあるのでこの辺りはご自由に。

今回はTakaoフォントを導入してみます。

適当なディレクトリでwgetしてunzipしましょう。

wget https://launchpad.net/takao-fonts/trunk/15.03/+download/TakaoFonts_00303.01.zip
unzip TakaoFonts_00303.01.zip

次にフォントの指定を行います。

renderd.conf[default] セクションで指定してあるxmlファイルに設定内容を追記します。

<FontSet name="(フォントセット名)">
  <Font face-name="TakaoGothic Regular"/>

今回構築した環境では、デフォルトで3つのフォントセットがあったのでそれぞれ記述を行います。

キャッシュの削除

mod_tileはレンダリングした画像をキャッシュとして保持するため豆腐が入り込んだ画像のキャッシュが残っていることが多いです。

キャッシュを削除してあげると再レンダリングが行われ、正しく表示されたタイル画像の取得ができるようになります。

rm -r /var/lib/mod_tile/default/*

上記パスは環境によって変わるかもしれません。

見つからない場合は

cd /
find | grep mod_tile

とかをいい感じに使って探しましょう。

確認

無事削除できたらあとは確認するだけです。leafletなどから呼び出してあげましょう。

無事に日本語で表示されました。フォントが気に入らない場合は任意のフォントを使えるので入れ替えるといい感じになります。(フォントのライセンスには注意が必要です。)

それでは今回はこの辺で。

%d人のブロガーが「いいね」をつけました。