最近PostGISを使ったアプリの構築をしました。
地図の経路検索とかをSQLでできてPostGIS面白いです。
ローカルでDocker上でOSMのデータを使ってPostGiS+pgrouting環境を作ってみました。
但し書き
- やっつけです。もっときれいなやり方あるかもしれません。
- 1から改めて検証したけど漏れがあったらすみません。
使ったDockerイメージ
- PostGIS+pgroutingのイメージ。今回はこれをベースにosm2pgroutingも入れます。
- OSMのデータをインポートするためのツール。
最終的なDocker-compose
https://github.com/panda-telecoms/postgis-osm
使い方
Git pullしてdocker-compose.ymlのあるところで下記コマンドを実行
docker-compose up -d
postgis、pgroutingの有効化
$ docker-compose run postgis sh -c 'exec psql -d"$POSTGRES_DB" -hpostgis -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'
osm=# CREATE EXTENSION postgis;
CREATE EXTENSION
osm=# CREATE EXTENSION pgrouting;
CREATE EXTENSION
osm=#OSMのデータを作る
こちらから最寄りのデータを取得します。
日本地図なんかは大きいデータになるのでローカルで遊ぶには向いてないと思います。
(近所の方がなじみがあって使いやすいと思いますし)
ファイル形式はpbfで落とします。
https://extract.bbbike.org/
- pbfからosmデータにコンバートする
3で落としたデータだけでもPostGISを使うことはできます。
もしpgroutingを使うときはosm2pgroutingを使うときにpbfからosm形式に変換しないといけません。
Osmconvertというツールが公開されているのでこちらをつかって変換してみてください
https://wiki.openstreetmap.org/wiki/Osmconvert
- データのインポート
``` |
使ってみる
psqlで入ってデータを確認します
docker-compose run postgis sh -c 'exec psql -d"$POSTGRES_DB" -hpostgis -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres' |
planet_osm_pointの中を見てみます。カラムway
をgeojsonとして出力することでPostGISの関数も使えることを確認してみます
|
データは良さそうですし、PostGISの関数も使えてます。
QGISで出力するとこんな具合
pgroutingも使ってみます。
https://live.osgeo.org/archive/10.5/ja/quickstart/pgrouting_quickstart.html
osm=# SELECT seq, edge, b.the_geom::text AS "the_geom (truncated)" |
QGISで見てみると。。。(緑の線がそれ)
良さそうです。
今の検証結果をグラフィカルに見たいときはQGISなりを使います。
今回のdocker構成の場合は
ホスト名: localhost |
でいけるかなと思います。
(繋ぎ方もどこかで書くかもしれません)