PostGISとGeoDjangoを使ってLeafletでGeoJSON Tile Layerを表示してみる(1) – インストール編 –

いつのまにやらOpenLayersじゃなくてLeafletとかでてきたり、DjangoでPostGISが使えるとか、知らないことが多すぎたので時代に追いつけ追い越せということで試してみました。なお、そこそこの長編になりましたので分割してお送りします。

はじめに

今回の登場人物を整理しておきましょう。

  • PostGIS
    PostgreSQLにGIS機能を追加したもの。最近はMySQLとかSQLite(SpatiaLite)でも地図データを扱えるようなのですが、機能的に一番充実してると思うのでPostGISを使うことにしました。
  • Django(GeoDjango)
    PythonのWebアプリケーションフレームワーク。いつの間にかGIS関連の対応をしており、その機能に注視した時にGeoDjangoと呼んでる感じでしょうか。つまりPostGISが”PostgreSQL+GIS拡張”なのと同じように、GeoDjangoは”Django+GIS拡張”と考えればいいじゃないでしょうか。なお、GeoDjango自体はDjangoに含まれますが、GeoDjangoとしてGIS関連の機能を使う場合には、GIS関連の依存ライブラリの導入が必須です。
    GeoDjangoを使って何ができるのかというと、ブラウザからのリクエストに応じてバックエンドのPostGIS等のDBに対して空間検索を行い、結果をKMLGeoJSON等の形式で返すことができます。つまりベクタ情報を扱えるWebフレームワークというイメージです(画像を扱えるかどうかはすいません、今のところわかってません)。
  • Leaflet
    Webブラウザ側で地図表示を行う時に利用するJSライブラリ。実のところ、OSSのJSライブラリとしてはOpenLayersしか知りませんでしたが、最近こちらも盛り上がっているようなので、今回はLeafletを使うことにしました。
    Leafletを使うと、OpenStreetMap地理院地図のタイル地図を表示した上に、GeoJOSNで取得した情報を重ねて表示することができます(勿論、OpenLayersでも可能です)。

これらを組み合わせて、ブラウザ上にOSMの地図を表示させ、その上にPostGISのデータを表示させるというところが今回の記事になります。GeoDjangoのチュートリアルを元にしていますので、合わせてそちらも参照すると良いかと思います。

環境構築

導入対象の環境

はい、みんな大好きUbuntuです。Server版としてインストールしただけで特別な状態ではありません。あ、Docker入ってますけど。あ、ついでにVagrantで上げてみました。
なお、今回データベースに登録するデータで日本語が入るのでUTF-8にしといたほうが後々はまらないと思いますがそんなもんはデータベース作成時にどうにかできるぜという人はご自由な言語にしておいてください。

$ sudo lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:        14.04
Codename:       trusty
$ echo $LANG
ja_JP.UTF-8

1.PostGISのインストール

PostGIS公式のインストール手順」から、Ubuntu14.04向けの手順を実施

$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt trusty-pgdg main" >> /etc/apt/sources.list'
$ wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install postgresql-9.3-postgis-2.1 postgresql-contrib

 2.データベースとかユーザ作成

入れなくてもいいのかもしれないですがadminpackを。

$ sudo -u postgres psql
psql (9.3.5)
"help" でヘルプを表示します.

postgres=# CREATE EXTENSION adminpack;
CREATE EXTENSION
postgres=# \q

postGIS向けデータベースのひな形を作成します。(2014/12/12追加)

sudo -u postgres createdb template_postgis
sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.3/contrib/postgis-2.1/postgis.sql
sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.3/contrib/postgis-2.1/spatial_ref_sys.sql

djangoからDBアクセスする為のユーザを作成します(パスワードは任意で)。

$ sudo -u postgres createuser geodjango -P
新しいロールのためのパスワード:****
もう一度入力してください:****

データベースを作成して先程作成したユーザに権限を付与します(2014/12/12修正)。

$ sudo -u postgres createdb -T template_postgis geodjangodb
$ sudo -u postgres psql geodjangodb
psql (9.3.5)
"help" でヘルプを表示します.

geodjangodb=# GRANT ALL ON DATABASE geodjangodb TO geodjango;
GRANT
geodjangodb=# \q

作成したユーザから接続できるようにpostgresの設定を変えてリスタート。

sudo vi /etc/postgresql/9.3/main/pg_hba.conf
-----------------------------------------------
# peer -> md5
#local  all    all      peer  
local   all    all      md5   
-----------------------------------------------
$ sudo service postgresql restart

今回はローカル接続なのでこの状態で接続確認しておきましょう。

$ psql geodjangodb -U geodjango
ユーザ geodjango のパスワード:****
psql (9.3.5)
"help" でヘルプを表示します.

geodjangodb=>\q

 3.GeoDjangoのインストール

GeoDjangoは普通にDjangoに含まれています。依存パッケージは「公式の手順」ではソースからビルドしていますが、今回の動作確認レベルではaptのバイナリで動作したので今回はお手軽方式でやることにします(ipythonは無くてもいいはず)。

$ sudo apt-get install gdal-bin
$ sudo apt-get install python-psycopg2
$ sudo apt-get install python-pip
$ sudo pip install Django==1.7.1
$ sudo pip install ipython

はい、これでようやくGeoDjangoを使える環境が整いました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*