Google Earth(TM) 地図サービスのオススメスポット・Wiki更新状況・おもしろい情報の紹介などを書き綴っていきます。

月曜日, 12月 29, 2008

【パプアニューギニア】 タブルブル火山

2008/12/15付け(米時間)にGE画像がアップデートされ、タブルブル火山も噴火状況が写ったため、被災者の皆様には恐縮ですが、wiki写真を差し替えました。ラバウルはここより北西方向になります。 →パプアニューギニアのページ

金曜日, 12月 19, 2008

pgRouting+OpenStreetMapを試す - SQL編の課題

 前回からの続きです。  前回までで必要なポイントは全部とれることがわかったので、後は実際に線を引くだけです。  ただ、MULTILINESTRING型ではline_locate_pointが使えず、GeometryNを使ってMULTILINESTRINGの一番最初のLINESTRINGを抽出したのですが、全てのgidに対してこれが通用するのかという疑問が残ります。  OpenStreetMapでは一つの道(線)ごとに様々な情報を設定するわけですから、実質的にはMULTIになってない気もしますが、これは僕の想像でしかありません。今のところ調べる気力は無いので、知っている方がいらっしゃれば教えてほしいところです。  pgRoutingをOpenStreetMapのデータで使う復習は、今年はここまでにしたいと思います。実際にこのデータからKMLを作ったりしたいのですが、VM上のUbuntuにRubyを入れたりしないといけません。来年への宿題にします。他に試したいこともありますので…。

金曜日, 12月 05, 2008

pgRouting+OpenStreetMapを試す - SQL編

 データの作成は前回までで終了しました。ここからはデータベースを実際に触ってみたいと思います。  パシフィコ横浜(35.459787,139.635447)から中途半端ではありますが、一方通行の通り(35.450191,139.638392)までのルートを検索するというのを課題にします。  今回は、端末からpsqlを触ります。
psql -U postgres osm
 レジュメ通りですので、osmに接続します。  ところで、レジュメに記載されているルート検索アルゴリズムは3通りあり、いずれも道のidを渡すようになっています。例えばShooting-Star algorithmのshortest_path_shooting_star関数はsource_idとtarget_idを必要としています。  グーグルアース等で利用するには緯度・経度から検索したいところです。他によい方法があるかもわかりませんが、とりあえず、PostGISの機能を利用して、検索開始場所の緯度・経度から最も近い道を探し、なおかつ、その道の中でも検索開始場所に最も近い部分を検索することにします。
SELECT gid FROM ways ORDER BY Distance(the_geom,GeomFromText('POINT(139.635447 35.459787)',4326));
 上記SQL文は、端的に述べれば「POINT(139.635447 35.459787)から近い順に、gidを選ぶ」ということになるでしょうか。  ちなみに、4326は世界測地系を指定しています。(参考:Bubble://ちずろぐ/別館/SRID)  結果は次の画像のようになりました。 pgRoutingの復習1  gid=26の道がスタート地点から一番近い道のようです。  次は、gid=26上の点で、スタート地点から一番近い点を求めたいところです。まずはgid=26の道の座標を確認してみます。
SELECT asEWKT(the_geom) FROM ways WHERE gid = 26;
 結果は次のようになりました。(一部抜粋)
SRID=4326;MULTILINESTRING((139.6337473 35.460318,139.633824 35.4602207,139.6339788 35.4600243,139.6342115 35.4597289,139.6345221 35.4593345,139.6348368 35.458935,139.6352296 35.4584362,139.635288 35.4583743))
 このgid=26の道の始点を0、終点を1として、スタート地点から(gid=26の道上で)一番近い点がどこにあるのかを探ります。
SELECT line_locate_point(GeometryN(MLineFromText('SRID=4326;MULTILINESTRING((139.6337473 35.460318,139.633824 35.4602207,139.6339788 35.4600243,139.6342115 35.4597289,139.6345221 35.4593345,139.6348368 35.458935,139.6352296 35.4584362,139.635288 35.4583743))'),1),PointFromText('Point(139.635447 35.459787)',4326));
 すると、次のような結果が返ってきました。(一部抜粋)
line_locate_point ------------------- 0.592158169301421 (1 row)
 つまり、gid=26の道の始点から0.592158169301421の点が、スタート地点から一番近いということになります。  続く… (参照サイト) PostGIS リファレンス PostGISの関数

水曜日, 12月 03, 2008

pgRouting+OpenStreetMapを試す - 準備編

 今回からpgRoutingとOpenStreetMapを実際に使用するところを復習してみます。(参照前回記事:pgRoutingの環境構築を復習)  OpenStreetMapのデータはXML形式になっており、これをpgRoutingにコンバートするにはosm2pgroutingを使用します。というわけで、まずはosm2pgroutingをインストールします。インストールに関するレジュメは次のリンク先です。  http://pgrouting.postlbs.org/wiki/WorkshopFOSS4G2008/ch10  必要な環境が挙げてあります。expatだけいれてなかったので、次のコマンドを打ちます。
sudo apt-get install expat
 その後レジュメに戻って特に障害も無くインストールは完了しました。  続いて、レジュメを離れてOpenStreetMapのデータを取得します。データ取得に関しては次のサイトを参考にします。 http://wiki.openstreetmap.org/index.php/OSM_Protocol_Version_0.5  Daniel Kastlさんが大半を作成されたという横浜のデータを使ってみたいと思います。  実際に取得したデータは以前ラーメン産業展を見に行ったパシフィコ横浜から、中華街を含む範囲です。 http://api.openstreetmap.org/api/0.5/map?bbox=139.628334,35.43868,139.659963,35.463326  上記、OpenStreetMapのXMLデータを取得しました。  レジュメに戻り「How to use」をそのまま実行します。(もちろん、ファイルへのパスは先ほどダウンロードしたファイルへ変更します。)  これで使用するデータをデータベース上に流し込むことができました。  続きはまた今度…。