Tilemill を使ってベクトルデータをタイルに変換する

GUI じゃなくて CUI を使います。
メイン PC は Core i7 だけど他の作業に影響でないようにサーバで実行したかっただけです。

下記のサイトを参考にしました。

今回実行した環境は debian 8.2 の上で実行させた Ubuntu 14.04.3 LTS の docker コンテナです。
ホストの性能は次の通り

ホストマシンで docker コンテナを実行して必要なツールを入れます。
ストレージのバインドをちゃんと使えばこれらのツールは不要だと思います。

$ docker run -it ubuntu bash
# apt-get update
# apt-get install vim unzip ssh -y

Tilemill 本体を入れます。
リポジトリを追加すれば apt-get でインストールできるようだったので Ubuntu にしました。
素の Ubuntu コナテナには add-apt-repository が入ってないのでまずはそっちから入れます。

# apt-get install software-properties-common -y
# hash -r
# add-apt-repository ppa:developmentseed/mapbox
# apt-get update
# apt-get install tilemill -y

設定で、server の項目が true になっていることを確認します。
いや、もしかしたら変換するだけならこの確認いらないかも。

# vi /etc/tilemill/tilemill.config
{
  "files": "/usr/share/mapbox",
  "server": true,
}

Tilemill を起動させます。

# start tilemill

プロジェクトファイルと対象のシェープファイルを適当にコンテナに送り込みます。

今回は Windows の Tilemill で作成したプロジェクトファイルとシェープファイルdebian ホストに送って zip で固めた後コンテナ内から scp で取り込みました。
プロジェクトファイル一式は tilemill.config の files で設定したディレクトリに突っ込んで、シェープファイルは適当なディレクトリに配置します。
プロジェクトファイル内でシェープファイルを指定している Datasource のパスを適切なパスに変更しておくのを忘れないようにしないといけません。

プロジェクト一式のセットが終わったら nodejs から Tilemill を動かします。

# cd /usr/share/tilemill
# time node index.js export kawagoe \
/usr/share/mapbox/export/kawagoe.mbtiles \
--format=mbtiles \
--bbox=139.37745953173797,35.8375900732108,139.55836749816908,35.96223428357177 \
--minzoom=17 \
--maxzoom=22 \
--metatile=2 \
--scale=1 \
--scheme=pyramid \
--log --files=/usr/share/mapbox/

ここでは埼玉県川越市全域のタイルを作る指定にしています。
最大ズームレベルは25にしたかったのですが、22までにしろというエラーが出たので22にしました。

できあがった mbtiles を取り出して作成完了です。
高性能な CPU を使うと早くできるんですけどねぇ