OpenStreetMapのTile情報を一括ダウンロードして表示に備える

2015.05.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

下記2本のブログエントリ『TableauでのTMSファイル連携で地図情報連携』→『OpenStreetMapを自作&Tableauと連携』に続いての3本目関連エントリとなる当エントリでは、2本目の続き的な内容として『Tile情報を事前に用意しておいて表示に備える』手順について、試してみた事をまとめておこうと思います。

目次

Tileとは

ここでもまた、nyampireさんのエントリを参考にさせて頂きたいと思います。下記エントリ『クライアントからのデータの流れ』にある画像及び説明文のような流れで、リクエストのあった画像ファイルが表示される、という仕組みでOpenStreetMapは成り立っているようです。

この、画像ファイルを返す部分の仕組みとして、OpenStreetMapではズーム({Z})、縦座標と横座標({X}と{Y}/どっちがどっち?)に関するリクエストを受け取り、対応するズーム/縦座標/横座標にある画像を返す、という流れになっている模様。この時に生成されたTile画像が所定のフォルダに格納され、次に表示があった時には迅速に結果を返すようになっている...という流れなのでしょう。

こちらのエントリで自作OpenStreetMapサーバへの設定を行なった状態から、まだ表示をさせていない地域を表示させてみます。今回はこのタイミングで九州地方を表示させていなかったので、地理検索で九州地方を表示させてみます。

osm-tiles-download-01

一部表示される部分もありましたが、ほぼ大半が以下のように表示エラーとなってしまいました。サーバのスペックによる部分もあるのでしょうが、生成に時間が掛かるのであれば『最初から用意しておけば良いのでは無いか?』と思いました。

osm-tiles-download-02

Tileデータの入手とインポート

ちなみにそんな情報ってあるのかしら?と幾つか調べてみたところ、まさにそのものズバリなものが!Tile情報の一括ダウンロードにはdownloadosmtiles.plと言うものを使いました。Perl製のプログラムで、引数を指定する事で所定の地域の画像ファイルを一括して落とせる、というものです。

OpenStreetMapを導入したサーバ(Ubuntu14.04)にPerlが入っているか確認します。入ってました。

$ perl -v

This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-gnu-thread-multi
(with 41 registered patches, see perl -V for more detail)

Copyright 1987-2013, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

$

まずはPerlプログラムをダウンロードします。

$ sudo wget http://search.cpan.org/src/ROTKRAUT/Geo-OSM-Tiles-0.02/downloadosmtiles.pl

次に取得する情報の生成。ひとまず欲しいのは(確認用に)九州地方のみの情報なので、Google Mapの緯度経度参照ツールなどを使い、九州地方の大体のエリアを示す緯度経度情報を取得します。

osm-tiles-download-03

緯度経度の範囲、ズームの情報(粒度のようなもの)を指定して実行(ダウンロード先は未指定の場合、実行パスをと同じ場所に保存されます)。....とエラーが出てしまいました。事前に他のライブラリが必要となるようです。

$ pwd
/var/www
$ sudo mkdir tiles
$ cd tiles/
$ sudo perl downloadosmtiles.pl --lat=33.057397:33.874741 --lon=129.490723:129.995605 --zoom=1:12
Can't locate Geo/OSM/Tiles.pm in @INC (you may need to install the Geo::OSM::Tiles module) (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at downloadosmtiles.pl line 6.
BEGIN failed--compilation aborted at downloadosmtiles.pl line 6.

必要なライブラリを特定し、aptコマンドでインストールします。

$ aptitude search ^lib.*-perl | grep osm
p   libgeo-osm-tiles-perl           - module for calculating tile numbers for Op
p   libosm-gary68-perl              - OpenStreetMap perl module                 
$ 
$ aptitude install libgeo-osm-tiles-perl libosm-gary68-perl

そして再実行。

$ sudo time perl downloadosmtiles.pl --lat=33.057397:33.874741 --lon=129.490723:129.995605 --zoom=1:12
Download 1 (1 x 1) tiles for zoom level 1 ...
Download 1 (1 x 1) tiles for zoom level 2 ...
Download 1 (1 x 1) tiles for zoom level 3 ...
Download 1 (1 x 1) tiles for zoom level 4 ...
Download 1 (1 x 1) tiles for zoom level 5 ...
Download 1 (1 x 1) tiles for zoom level 6 ...
Download 1 (1 x 1) tiles for zoom level 7 ...
Download 2 (1 x 2) tiles for zoom level 8 ...
Download 3 (1 x 3) tiles for zoom level 9 ...
Download 8 (2 x 4) tiles for zoom level 10 ...
Download 28 (4 x 7) tiles for zoom level 11 ...
Download 91 (7 x 13) tiles for zoom level 12 ...
0.27user 0.07system 0:30.12elapsed 1%CPU (0avgtext+0avgdata 16628maxresident)k
0inputs+4648outputs (0major+5310minor)pagefaults 0swaps

以下の様にダウンロードが出来ました。

$ ls -la
total 80
drwxr-xr-x 17 root root 4096 May 30 23:38 .
drwxr-xr-x  5 root root 4096 May 30 23:13 ..
drwxr-xr-x  3 root root 4096 May 30 23:25 1
drwxr-xr-x  4 root root 4096 May 30 23:25 10
drwxr-xr-x  6 root root 4096 May 30 23:25 11
drwxr-xr-x  9 root root 4096 May 30 23:26 12
drwxr-xr-x  3 root root 4096 May 30 23:25 2
drwxr-xr-x  3 root root 4096 May 30 23:25 3
drwxr-xr-x  3 root root 4096 May 30 23:25 4
drwxr-xr-x  3 root root 4096 May 30 23:25 5
drwxr-xr-x  3 root root 4096 May 30 23:25 6
drwxr-xr-x  3 root root 4096 May 30 23:25 7
drwxr-xr-x  3 root root 4096 May 30 23:25 8
drwxr-xr-x  3 root root 4096 May 30 23:25 9
-rw-r--r--  1 root root 8465 Dec 30  2008 downloadosmtiles.pl
$

一方、サーバの方でレンダリング済となっているタイルの情報を確認してみます。デフォルトの場合は/var/lib/mod_tile/defaultにあるようなので確認。確かにあります。

$ ls -la /var/lib/mod_tile/default/
total 64
drwxr-xr-x 16 www-data www-data 4096 May 30 22:43 .
drwxr-xr-x  3 www-data www-data 4096 May 30 20:54 ..
drwxr-xr-x  3 www-data www-data 4096 May 30 21:39 0
drwxr-xr-x  3 www-data www-data 4096 May 30 21:39 1
drwxr-xr-x  3 www-data www-data 4096 May 30 21:26 10
drwxr-xr-x  3 www-data www-data 4096 May 30 20:54 11
drwxr-xr-x  3 www-data www-data 4096 May 30 21:25 12
drwxr-xr-x  3 www-data www-data 4096 May 30 21:25 13
drwxr-xr-x  3 www-data www-data 4096 May 30 20:55 14
drwxr-xr-x  3 www-data www-data 4096 May 30 21:27 15
drwxr-xr-x  3 www-data www-data 4096 May 30 21:30 16
drwxr-xr-x  3 www-data www-data 4096 May 30 22:10 17
drwxr-xr-x  3 www-data www-data 4096 May 30 22:43 6
drwxr-xr-x  3 www-data www-data 4096 May 30 21:25 7
drwxr-xr-x  3 www-data www-data 4096 May 30 21:05 8
drwxr-xr-x  3 www-data www-data 4096 May 30 21:25 9
$

tileデータの入れ替え作業を行います。

## キャッシュを全て削除
$ sudo rm -r /var/lib/mod_tile/default/*

## ダウンロードしたTiles情報をキャッシュフォルダ配下へ移動
$ sudo mv /var/www/tiles/1/ /var/lib/mod_tile/default/
$ sudo mv /var/www/tiles/2/ /var/lib/mod_tile/default/
$ sudo mv /var/www/tiles/3/ /var/lib/mod_tile/default/
:
$ sudo mv /var/www/tiles/10/ /var/lib/mod_tile/default/
$ sudo mv /var/www/tiles/11/ /var/lib/mod_tile/default/
$ sudo mv /var/www/tiles/12/ /var/lib/mod_tile/default/

## 所有者変更
$ sudo chown --recursive www-data.www-data /var/lib/mod_tile/default/1/
$ sudo chown --recursive www-data.www-data /var/lib/mod_tile/default/2/
$ sudo chown --recursive www-data.www-data /var/lib/mod_tile/default/3/
:
$ sudo chown --recursive www-data.www-data /var/lib/mod_tile/default/10/
$ sudo chown --recursive www-data.www-data /var/lib/mod_tile/default/11/
$ sudo chown --recursive www-data.www-data /var/lib/mod_tile/default/12/

httpd及びrenderdサービスをそれぞれ再起動。

$ sudo /etc/init.d/apache2 restart 
 * Restarting web server apache2                                                                                        [Sun May 31 00:38:29.122210 2015] [tile:notice] [pid 10168:tid 139993167763328]
 Loading tile config default at /osm/ for zooms 0 - 20
 from tile directory /var/lib/mod_tile with extension .png and mime type image/png
                                              [ OK ]
$ sudo /etc/init.d/renderd restart 
 * Restarting Mapnik rendering daemon renderd
                                              [ OK ] 
$

表示確認&まとめ

再起動完了後、Tableau経由で改めて九州地方を表示させてみます。今度は表示される様になりました。ちなみに再起動&Tableau操作後、すぐに画像が表示された訳では無くて暫く経ってみたり、ブラウザで事前に操作してみた後で表示される様な感じでした。(多少タイムラグがある感じ?)

この辺り、何をどうすれば即時反映、というかスムーズに表示されて来るのかという部分については正直まだあんまり分かっていませんw サーバのスペックも関係しているとは思いますが、何か設定を変える必要があるのかも知れません。この辺りのチューニングについて、御存知の方居ましたら是非コメント等頂けると嬉しいです。

osm-tiles-download-04

今回は新しくコンテンツを追加する方法を試して見ましたが、更新を行う際は以下の『osmosis』というものを使う方法もあるようです。こちらについても、機会があれば試してみたいと思います。こちらからは以上です。