<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    マッパーの皆さん<br>
    <br>
    三浦です。<br>
    <br>
    現在、OSMタイルサーバを開発しています。日本のOSMコミュニティとして<br>
    独自レンダリングを実現したいと考えています。<br>
    <br>
    開発への参加者を募集したいと思います。<br>
    <br>
    同時に、日本らしい地図表現を行うためのmapnikでのレンダリングスタイルを<br>
    研究される方もWelcomeです。<br>
    <br>
    開発は、github.com[*0]で行なっています。<br>
    <br>
    名前は、キャッシュになっていますが、(最初はキャッシュの構築から開始したため)<br>
    OSMの独自タイル配信サーバの機能をもたせる計画です。<br>
    <br>
    開発に興味のある方、一緒に研究しませんか。<br>
    <br>
    <br>
    <アーキテクチャ><br>
    <br>
    OSMのwikiでは、apacheにmod_tile[*1]を導入し、mapnik[*3]ライブラリを使った<br>
    Tirex[*2]がタイル画像を生成する方法が説明されています。<br>
    また、DBMSには、PostGISを用いて、 osm2pgsqlツールによって最新データを<br>
    取り込むようです。osmosisツールを使うことで、自動更新ができます。<br>
    <br>
    独自タイル配信サーバの開発では、次のアーキテクチャを考えています。<br>
    <br>
    <開発ロードマップ><br>
    <br>
    Ver 0.8<br>
    <br>
    * nginxサーバで、タイルキャッシュ機能を提供します。(DONE)<br>
    * リクエストのx/y/z値のチェックをおこなって不正なアクセスを<br>
      抑止します。(in progress)<br>
    * tile.openstreetmap.orgの地域分散プログラム(CDN)へ参加可能な<br>
     機能を備えます。(DONE)<br>
    <br>
    Ver 0.9<br>
    <br>
    * PostGISデータベースに日本地域のOSMデータを日次で<br>
      自動更新できるようにします。(ほぼ完了)<br>
    * アクセス元が日本国内かどうかを判定して、独自タイルの配信を<br>
       切り替えます。(done)<br>
    * リクエストのx/y/z値をチェックして、レンダリング対象かどうかを<br>
     判定できます。(未実装)<br>
    * 一部タイルについて、静的タイルを配信できるようにします。(done)<br>
    <br>
    Ver 1.0<br>
    <br>
    * nginxサーバのLUA拡張を利用して、mod_tile相当を実装します。<br>
    * タイル生成は、Tirex[*2]で行います。<br>
    * 生成されたタイル画像ファイルは、ファイルシステムに格納されます。<br>
    * nginxサーバとTirexは、UDPソケット通信でコマンドをやり取りします。<br>
    * mapnikのスタイルを改良します。(アイコンとか、色とか)<br>
    <br>
    mod_tile相当とは<br>
    * 独自タイル生成を、リクエストに応じて、on the flyで実施します。<br>
    * データベースの更新にあわせて、古くなったタイル画像を削除し、<br>
     再度生成されるようにします。<br>
    * タイル画像が古い(expire)の場合でも、レスポンスを確保するため<br>
     古いタイルを返送するが、httpでの画像の有効期間を再生成に<br>
     必要な時間を動的に計算して、設定します。<br>
     ユーザが再度表示しようとすると、新しいタイルになります。 <br>
    <br>
    Ver 1.x <br>
    <br>
    * 日本らしい地図表現のバージョンアップをしていきます。<br>
    <br>
    Ver 2.0<br>
    <br>
    * Redis Key-Value-Storeを活用して、メタ情報を管理します。<br>
    * Redis Pub/Subを利用して、コマンドをやり取りします。<br>
    * Tirexを拡張して、redis pub/subに対応させます。<br>
    * renderd_expireを拡張して、redis pub/subに対応させます。<br>
    * nginx-luaから、redis pub/subを利用したコマンド利用させます。<br>
    <br>
    Ver 3.0<br>
    <br>
    * Redis KVSへタイルそのものを格納します。<br>
    * Redisリプリケーションやnginxリバースプロキシ、Tirex分散等により<br>
    大規模サーバ構築可能にします。<br>
    * 更新タイルやアクセスの少ないタイルのRedis自動expire機能によって<br>
     DISK容量を削減可能にします。<br>
    * 本家レンダリングのリプレースを狙います(?)<br>
    <br>
    <実行環境><br>
    <br>
    環境は、Ubuntu 11.10(64bit)です。<br>
    Nightly buildのmapnikを使っています。[*5]<br>
    nginxは、nginx-extra packageを使います。<br>
    luaからredisデータベースへのアクセスは、OpenRestyのLua-redis[*6]<br>
    モジュールを使います。<br>
    Tirexは、ドキュメントに従ってmake debして、パッケージを導入します。[*7]<br>
    redis-server パッケージを導入します。<br>
    <br>
    <インストール><br>
    <br>
    上記実行環境を整えたあと、<br>
    $ git clone git://github.com/osmfj/tilecache.git<br>
    $ cd pkgs<br>
    $ sudo dpkg -i <a
href="https://github.com/osmfj/tilecache/blob/master/pkgs/lua-nginx-redis_0.15-1_all.deb"
      class="js-directory-link js-slide-to css-truncate-target"
id="cb8aa536613203a78fab7d2d45eb7ec9-c83769ee2d0db147e5cbc664cc0e14523ee39cbf"
      title="lua-nginx-redis_0.15-1_all.deb">lua-nginx-redis_0.15-1_all.deb</a><br>
       これで、redisにアクセスできる環境ができます。このパッケージは<br>
     Ubuntu raringからしか提供されていないので、同梱されています。<br>
    $ cd tilecache<br>
    $ (cd nginx; sudo ./install.sh)<br>
      これで、nginxの設定が導入されます。サーバ名はtileになっている想定です。<br>
    $ cd render_expire<br>
    $ make<br>
    $ sudo make install<br>
      これで、render_expireが/opt/tileserver/bin に導入されます。<br>
    <br>
    <br>
    [*0] <a class="moz-txt-link-freetext" href="https://github.com/osmfj/tilecache">https://github.com/osmfj/tilecache</a><br>
    [*1] <a class="moz-txt-link-freetext" href="http://wiki.openstreetmap.org/wiki/Mod_tile">http://wiki.openstreetmap.org/wiki/Mod_tile</a><br>
    [*2] <a class="moz-txt-link-freetext" href="http://wiki.openstreetmap.org/wiki/Tirex">http://wiki.openstreetmap.org/wiki/Tirex</a><br>
    [*3] <a class="moz-txt-link-freetext" href="http://wiki.openstreetmap.org/wiki/Mapnik">http://wiki.openstreetmap.org/wiki/Mapnik</a><br>
    [*4] <a class="moz-txt-link-freetext" href="http://nginx.org/ja/">http://nginx.org/ja/</a><br>
    [*5] <a class="moz-txt-link-freetext" href="https://launchpad.net/~mapnik/+archive/nightly-trunk">https://launchpad.net/~mapnik/+archive/nightly-trunk</a><br>
    [*6] <a class="moz-txt-link-freetext" href="https://github.com/agentzh/lua-resty-redis">https://github.com/agentzh/lua-resty-redis</a><br>
    [*7]
    <a class="moz-txt-link-freetext" href="http://wiki.openstreetmap.org/wiki/Tirex/Building_and_Installing">http://wiki.openstreetmap.org/wiki/Tirex/Building_and_Installing</a><br>
    <br>
    <br>
    <br>
    --<br>
    Hiroshi Miura<br>
    OpenStreetMap Foundation Japan<br>
  </body>
</html>