OpenStreetMap Japan Nginx TileServer 1.0 リリースのお知らせと開発参加のお誘い

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

OpenStreetMap Japan Nginx TileServer 1.0 リリースのお知らせと開発参加のお誘い

Hiroshi Miura(@osmf)
OSGeoの皆様

オープンストリートマップ・ファウンデーション・ジャパン
三浦です。

この3月より、オープンストリートマップのタイルキャッシュを行う
サーバの開発を進めてきました。
そして、現在はタイルサーバへと進化し、バージョン1.0をリリース
することになりました。

OSSのGISの専門家の皆様にお知らせすると共に、
開発への参加をお誘いいたします。

ダウンロードサイトは次の通りです。
http://osmfj.github.io/tilecache

開発関係のページは
https://github.com/osmfj/tilecache
を参照ください。

開発の議論は、Lingrで行なっています。
http//lingr.com/signup?letmein=osmfj_devel

タイルキャッシュサーバは、負荷分散をはかるために、ヨーロッパで配信されている
タイルを、日本でキャッシュして配信していこうというものです。

4月からは、日本の独自タイルを配信するために、タイルサーバを
開発して来ました。

このタイルキャッシュ・タイルサーバは、次のテクノロジーを採用しています。

Nginx  + mod_lua
Tirex
Mapnik
PostGIS

Nginxは、世界普及度2位のWebサーバであり、大量クライアントを
処理する大規模Webサイト向けのアーキテクチャをもつ次世代Webサーバでは
トップのシェアをもつWebサーバ・プロキシーエンジンです。

アマゾンとeBayの取引高をたしたより多い商取引をおこなう
世界最大の商取引プラットホームTaoBao(中国)で、大量処理を
行なっているソフトウエアになります。sinsai.infoでも採用されています。

Nginxに組み込み言語LUAを追加するモジュールを組み込んだプラットホームを
採用しています。

LUA言語により、複雑なリクエスト処理を行うことで、利用者のIPアドレスや
リクエスト内容を分析し、適切なタイルをレスポンスすることができます。

Nginx Tilecache&TileServer 1.0では、次の処理を実施できます。

1.クライアントのIPアドレスにより、提供するタイルを切り替えられます。

2.OSMのタイルキャッシュサーバを実現できます。

3.OSMのタイルレンダリングサーバを実現できます。

4.静的に配備したタイルを、キャッシュや、レンダリングに優先して置き換えることができます。

5.レンダリング・タイルや、キャッシュのタイルを、クライアントのアドレスや
 リクエストされたx/y/zoomによって、切り替えられます。

  例えば、日本のデータだけをPostGISに持っておいて、日本のタイルは、自分で生成するが、
 それ以外は、OSMの本家のタイルサーバのキャッシュを配信することができます。

以上のような柔軟な機能を持っているにも関わらず、NginxのノンブロッキングI/O
技術の優位性を活かすことで、大規模トラフィックに耐えうるポテンシャルを持っています。

現在、OSM Japanのサイト、 http://osm.jp/ において、本サーバソフトウエアによる
タイル配信(キャッシュ配信)でトップ画面のmapを配信しております。


参考:
OSMでは、次の技術がデファクトになっています。

OSMメインサーバ
    Apache+mod_tile
    renderd レンダリングサーバ
    Mapnik
    PostGIS  

一部の配信サーバ
    Apache + mod_tile
    Tirex レンダリングサーバ
    Mapnik
    PostGIS

Tirexは、サンプル実装として、 node.jsによる実装が同梱されていますが、
プロダクション利用に耐えうるものではないです。

以上お知らせと、本プロジェクトへの参加のお誘いでした。


三浦

_______________________________________________
OSGeoJapan-discuss mailing list
[hidden email]
http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
Reply | Threaded
Open this post in threaded view
|

ポリゴン処理の話題

Hiroshi Miura(@osmf)
OSMFJ 三浦です。


ちょっとした話題を提供すると共に、やりかたが正しいのかどうかの相談を
GISの専門の皆様にさせてほしいです


<経緯>
分散タイルサーバを実現するTileMan(*1)プロジェクトで、
 lua-nginx-osm ライブラリ(*2)というのを、コアライブラリとして開発しています。
TileManの機能については、State of the Map 2013(*3)のプレゼンを参照ください。
#関連URLは末尾にあります

この中で、次のような機能を実現しています。

1) ポリゴン指定した地域をデータとして持っている。
2) タイルサーバで、タイル要求されたX/Y/Zoomについて、
  そのタイルが、(1)の地域に含まれているかどうかを判定する。
3) 含まれている場合、タイルを生成する。

地域データは、geofabrikのデータ(*4)を意識しています。

DBとして、特定の地域のデータだけPostGISに持っておいて、タイル要求がきたときに、
それがDBに入っていればレンダリング実施、そうでなければ、アップストリームの
tile.openstreetmap.orgへ要求、みたいな処理(*5)を実現しています。

これは、他の製品でもありそうな機能ですよね。


<背景>
さて、上記の処理を行うために、
is_inside_regionという関数(*6)を定義しました。計算速度を上げるために、
簡易なアルゴリズムを採用しました。ポイントは以下です

res = (y1 - y2) * nx + (x2 - x1) * ny + x1 * y2 - x2 * y1

(x1, y1) (x2, y2) は、地域を指定するポリゴンの一辺のベクトル
(nx, ny)は、判定するタイル要求の位置

上記は外積をとっており、全ての辺について判定して、すべて負でなければ、
すべての辺の内側に、判定するタイル要求の位置があることが分かります。

しかし、この判定ロジックには、弱点があり、比較するポリゴンは、かならず
convex polygon (凸多角形)である必要があるのです。


<本題>
そこで、たとえば japan.kml (*7)のような凹凸多角形(concave polygon)を凸多面体に分割することにしました。
単純なケースでは、手作業でも可能ですが、複雑になると、手作業では不可能になります。

このような問題は、計算幾何学で研究されていて、素晴らしいライブラリがすでに提供されています。
そこで、CGALを用いて、ポリゴンを複数の多角形に変換し、LUAのプログラムを生成するようなユーティリティプログラム
(*9)を書くことにしました。(GEOSには、該当機能がないみたいでした)

実際に触ってみたい方は、つぎのようにお願いします

$ git clone https://github.com/miurahr/lua-nginx-osm.git
$ cd lua-nginx-osm
$ apt-get install libcgal-dev cmake make
$ make

これでプログラムが生成されるはずです。実行は、

$ utils/poly2lua/poly2lua -t

ここで(-t)をつけると、テストモードで、内蔵の日本の定義データを元に、複数の多角形(緯度経度)を示すデータを生成します。
また、osm/data/*.kml が元データで、 osm/data/*.luaが生成された複数の凸多角形のデータです。

ライブラリがC++用なので、C++でサンプルプログラムを参考に書いたですが、
出来が悪いかもしれません。


☆ で、ここで質問ですが、どうやったら、この生成されたデータが正しく凸多角形であることがわかるでしょうか?


本件は、ブログにかきました(*11)
------------------
(*1)https://github.com/osmfj/tileman
(*2)https://github.com/miurahr/lua-nginx-osm
(*3) http://miurahr.github.io/2013-0908-tileman.html#/title
(*4)http://download.geofabrik.de/asia/japan.html
(*5)https://github.com/osmfj/tileman/blob/master/doc/typical_configuration.png
(*6)https://github.com/miurahr/lua-nginx-osm/blob/master/osm /tile.lua#L81
(*7)https://github.com/miurahr/lua-nginx-osm/blob/master/osm/data/japan.kml
(*8) http://www.cgal.org/
(*9)https://github.com/miurahr/lua-nginx-osm/blob/master/utils/poly2lua.cpp
(*10)https://github.com/miurahr/lua-nginx-osm/blob/master/utils/kml2poly.py
(*11)http://blogs.da-cha.jp/momokuri.php/title-71
_______________________________________________
OSGeoJapan-discuss mailing list
[hidden email]
http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
Reply | Threaded
Open this post in threaded view
|

Re: ポリゴン処理の話題

Yoichi Kayama
かやまです

以下のようなコードがありましたが、こういうことなのでしょうか?

http://www.prefield.com/algorithm/geometry/isconvex.html


あとは全頂点を与えてConvexfulをかけてできたポリゴンと比較するとか.....
ちょいと検証してる時間がないので、なんかみつけるきっかけにならんかという情報提供です




2013年9月15日 12:43 Hiroshi Miura(@osmf) <[hidden email]>:
OSMFJ 三浦です。


ちょっとした話題を提供すると共に、やりかたが正しいのかどうかの相談を
GISの専門の皆様にさせてほしいです


<経緯>
分散タイルサーバを実現するTileMan(*1)プロジェクトで、
 lua-nginx-osm ライブラリ(*2)というのを、コアライブラリとして開発しています。
TileManの機能については、State of the Map 2013(*3)のプレゼンを参照ください。
#関連URLは末尾にあります

この中で、次のような機能を実現しています。

1) ポリゴン指定した地域をデータとして持っている。
2) タイルサーバで、タイル要求されたX/Y/Zoomについて、
  そのタイルが、(1)の地域に含まれているかどうかを判定する。
3) 含まれている場合、タイルを生成する。

地域データは、geofabrikのデータ(*4)を意識しています。

DBとして、特定の地域のデータだけPostGISに持っておいて、タイル要求がきたときに、
それがDBに入っていればレンダリング実施、そうでなければ、アップストリームの
tile.openstreetmap.orgへ要求、みたいな処理(*5)を実現しています。

これは、他の製品でもありそうな機能ですよね。


<背景>
さて、上記の処理を行うために、
is_inside_regionという関数(*6)を定義しました。計算速度を上げるために、
簡易なアルゴリズムを採用しました。ポイントは以下です

res = (y1 - y2) * nx + (x2 - x1) * ny + x1 * y2 - x2 * y1

(x1, y1) (x2, y2) は、地域を指定するポリゴンの一辺のベクトル
(nx, ny)は、判定するタイル要求の位置

上記は外積をとっており、全ての辺について判定して、すべて負でなければ、
すべての辺の内側に、判定するタイル要求の位置があることが分かります。

しかし、この判定ロジックには、弱点があり、比較するポリゴンは、かならず
convex polygon (凸多角形)である必要があるのです。


<本題>
そこで、たとえば japan.kml (*7)のような凹凸多角形(concave polygon)を凸多面体に分割することにしました。
単純なケースでは、手作業でも可能ですが、複雑になると、手作業では不可能になります。

このような問題は、計算幾何学で研究されていて、素晴らしいライブラリがすでに提供されています。
そこで、CGALを用いて、ポリゴンを複数の多角形に変換し、LUAのプログラムを生成するようなユーティリティプログラム
(*9)を書くことにしました。(GEOSには、該当機能がないみたいでした)

実際に触ってみたい方は、つぎのようにお願いします

$ git clone https://github.com/miurahr/lua-nginx-osm.git
$ cd lua-nginx-osm
$ apt-get install libcgal-dev cmake make
$ make

これでプログラムが生成されるはずです。実行は、

$ utils/poly2lua/poly2lua -t

ここで(-t)をつけると、テストモードで、内蔵の日本の定義データを元に、複数の多角形(緯度経度)を示すデータを生成します。
また、osm/data/*.kml が元データで、 osm/data/*.luaが生成された複数の凸多角形のデータです。

ライブラリがC++用なので、C++でサンプルプログラムを参考に書いたですが、
出来が悪いかもしれません。


☆ で、ここで質問ですが、どうやったら、この生成されたデータが正しく凸多角形であることがわかるでしょうか?


本件は、ブログにかきました(*11)
------------------
(*1)https://github.com/osmfj/tileman
(*2)https://github.com/miurahr/lua-nginx-osm
(*3) http://miurahr.github.io/2013-0908-tileman.html#/title
(*4)http://download.geofabrik.de/asia/japan.html
(*5)https://github.com/osmfj/tileman/blob/master/doc/typical_configuration.png
(*6)https://github.com/miurahr/lua-nginx-osm/blob/master/osm /tile.lua#L81
(*7)https://github.com/miurahr/lua-nginx-osm/blob/master/osm/data/japan.kml
(*8) http://www.cgal.org/
(*9)https://github.com/miurahr/lua-nginx-osm/blob/master/utils/poly2lua.cpp
(*10)https://github.com/miurahr/lua-nginx-osm/blob/master/utils/kml2poly.py
(*11)http://blogs.da-cha.jp/momokuri.php/title-71
_______________________________________________
OSGeoJapan-discuss mailing list
[hidden email]
http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss


_______________________________________________
OSGeoJapan-discuss mailing list
[hidden email]
http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
Reply | Threaded
Open this post in threaded view
|

Re: ポリゴン処理の話題

山手規裕
三浦様

山手と申します。

凸多角形かどうかを確認するだけでしたら、多角形の頂点を順に並べて、
全ての隣接する3点が同じ回り順(時計回りか反時計回り)であればいいのではないでしょうか。
的外れな回答でしたらご容赦ください。

山手 規裕
E-mail  : [hidden email]
URL     : http://mf-atelier.sakura.ne.jp/

On 2013/09/15, at 17:54, Yoichi Kayama wrote:

> かやまです
>
> 以下のようなコードがありましたが、こういうことなのでしょうか?
>
> http://www.prefield.com/algorithm/geometry/isconvex.html
>
>
> あとは全頂点を与えてConvexfulをかけてできたポリゴンと比較するとか.....
> ちょいと検証してる時間がないので、なんかみつけるきっかけにならんかという情報提供です
>
>
>
>
> 2013年9月15日 12:43 Hiroshi Miura(@osmf) <[hidden email]>:
> OSMFJ 三浦です。
>
>
> ちょっとした話題を提供すると共に、やりかたが正しいのかどうかの相談を
> GISの専門の皆様にさせてほしいです
>
>
> <経緯>
> 分散タイルサーバを実現するTileMan(*1)プロジェクトで、
>  lua-nginx-osm ライブラリ(*2)というのを、コアライブラリとして開発しています。
> TileManの機能については、State of the Map 2013(*3)のプレゼンを参照ください。
> #関連URLは末尾にあります
>
> この中で、次のような機能を実現しています。
>
> 1) ポリゴン指定した地域をデータとして持っている。
> 2) タイルサーバで、タイル要求されたX/Y/Zoomについて、
>   そのタイルが、(1)の地域に含まれているかどうかを判定する。
> 3) 含まれている場合、タイルを生成する。
>
> 地域データは、geofabrikのデータ(*4)を意識しています。
>
> DBとして、特定の地域のデータだけPostGISに持っておいて、タイル要求がきたときに、
> それがDBに入っていればレンダリング実施、そうでなければ、アップストリームの
> tile.openstreetmap.orgへ要求、みたいな処理(*5)を実現しています。
>
> これは、他の製品でもありそうな機能ですよね。
>
>
> <背景>
> さて、上記の処理を行うために、
> is_inside_regionという関数(*6)を定義しました。計算速度を上げるために、
> 簡易なアルゴリズムを採用しました。ポイントは以下です
>
> res = (y1 - y2) * nx + (x2 - x1) * ny + x1 * y2 - x2 * y1
>
> (x1, y1) (x2, y2) は、地域を指定するポリゴンの一辺のベクトル
> (nx, ny)は、判定するタイル要求の位置
>
> 上記は外積をとっており、全ての辺について判定して、すべて負でなければ、
> すべての辺の内側に、判定するタイル要求の位置があることが分かります。
>
> しかし、この判定ロジックには、弱点があり、比較するポリゴンは、かならず
> convex polygon (凸多角形)である必要があるのです。
>
>
> <本題>
> そこで、たとえば japan.kml (*7)のような凹凸多角形(concave polygon)を凸多面体に分割することにしました。
> 単純なケースでは、手作業でも可能ですが、複雑になると、手作業では不可能になります。
>
> このような問題は、計算幾何学で研究されていて、素晴らしいライブラリがすでに提供されています。
> そこで、CGALを用いて、ポリゴンを複数の多角形に変換し、LUAのプログラムを生成するようなユーティリティプログラム
> (*9)を書くことにしました。(GEOSには、該当機能がないみたいでした)
>
> 実際に触ってみたい方は、つぎのようにお願いします
>
> $ git clone https://github.com/miurahr/lua-nginx-osm.git
> $ cd lua-nginx-osm
> $ apt-get install libcgal-dev cmake make
> $ make
>
> これでプログラムが生成されるはずです。実行は、
>
> $ utils/poly2lua/poly2lua -t
>
> ここで(-t)をつけると、テストモードで、内蔵の日本の定義データを元に、複数の多角形(緯度経度)を示すデータを生成します。
> また、osm/data/*.kml が元データで、 osm/data/*.luaが生成された複数の凸多角形のデータです。
>
> ライブラリがC++用なので、C++でサンプルプログラムを参考に書いたですが、
> 出来が悪いかもしれません。
>
> ☆
> ☆ で、ここで質問ですが、どうやったら、この生成されたデータが正しく凸多角形であることがわかるでしょうか?
> ☆
>
> 本件は、ブログにかきました(*11)
> ------------------
> (*1)https://github.com/osmfj/tileman
> (*2)https://github.com/miurahr/lua-nginx-osm
> (*3) http://miurahr.github.io/2013-0908-tileman.html#/title
> (*4)http://download.geofabrik.de/asia/japan.html
> (*5)https://github.com/osmfj/tileman/blob/master/doc/typical_configuration.png
> (*6)https://github.com/miurahr/lua-nginx-osm/blob/master/osm /tile.lua#L81
> (*7)https://github.com/miurahr/lua-nginx-osm/blob/master/osm/data/japan.kml
> (*8) http://www.cgal.org/
> (*9)https://github.com/miurahr/lua-nginx-osm/blob/master/utils/poly2lua.cpp
> (*10)https://github.com/miurahr/lua-nginx-osm/blob/master/utils/kml2poly.py
> (*11)http://blogs.da-cha.jp/momokuri.php/title-71
> _______________________________________________
> OSGeoJapan-discuss mailing list
> [hidden email]
> http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
>
> _______________________________________________
> OSGeoJapan-discuss mailing list
> [hidden email]
> http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss

_______________________________________________
OSGeoJapan-discuss mailing list
[hidden email]
http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
Reply | Threaded
Open this post in threaded view
|

Re: ポリゴン処理の話題

Hiroshi Miura(@osmf)
嘉山さん、山手さん

ありがとうございます。

凸多角形かどうかを確認するだけならば、 世の中にアルゴリズムが有るという事で、
ライブラリを改めて確認して見ました。

CGALに、 is_convex() というそのものの関数が、有りました。
添付パッチのようにdebugmodeを追加してやってみたところ、大丈夫そうです。

お題:2013年9月15日 12:43 Hiroshi Miura(@osmf) <[hidden email]>:

>> このような問題は、計算幾何学で研究されていて、素晴らしいライブラリがすでに提供されています。
>> そこで、CGALを用いて、ポリゴンを複数の多角形に変換し、LUAのプログラムを生成するようなユーティリティプログラム
>> (*9)を書くことにしました。(GEOSには、該当機能がないみたいでした)
>>
>> $ utils/poly2lua/poly2lua -t
>>
>> ここで(-t)をつけると、テストモードで、内蔵の日本の定義データを元に、複数の多角形(緯度経度)を示すデータを生成します。
>> また、osm/data/*.kml が元データで、 osm/data/*.luaが生成された複数の凸多角形のデータです。
>>
>> ☆ で、ここで質問ですが、どうやったら、この生成されたデータが正しく凸多角形であることがわかるでしょうか?
On 2013年09月15日 19:21, 山手 規裕 wrote:
> 凸多角形かどうかを確認するだけでしたら、多角形の頂点を順に並べて、
> 全ての隣接する3点が同じ回り順(時計回りか反時計回り)であればいいのではないでしょうか。
>
> On 2013/09/15, at 17:54, Yoichi Kayama wrote:
>
>> 以下のようなコードがありましたが、こういうことなのでしょうか?
>>
>> http://www.prefield.com/algorithm/geometry/isconvex.html
>>

三浦


_______________________________________________
OSGeoJapan-discuss mailing list
[hidden email]
http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss

check_convex.diff (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: ポリゴン処理の話題

Hiroshi Miura(@osmf)
三浦です。

On 2013年09月16日 09:44, Hiroshi Miura(@osmf) wrote:
> 嘉山さん、山手さん
>
> ありがとうございます。
>
> 凸多角形かどうかを確認するだけならば、 世の中にアルゴリズムが有るという事で、
> ライブラリを改めて確認して見ました。
>
> CGALに、 is_convex() というそのものの関数が、有りました。
> 添付パッチのようにdebugmodeを追加してやってみたところ、大丈夫そうです。

該当のライブラリのマニュアルへのURLを参考までに貼っておきます。

http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Polygon/Chapter_main.html#Subsection_18.2.1

計算幾何学のライブラリという事で、GISより数学に近いのですが、多角形や多面体の処理は、
GISでも共通の話題という事で、参考になればとおもいます。

三浦
_______________________________________________
OSGeoJapan-discuss mailing list
[hidden email]
http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss