GeoDjangoで地図表示Webアプリを作ろう
目次
こんなことを書く
- GeoDjangoを使って地図表示&編集アプリのチュートリアルを紹介。
- Django経験者がGeoDjangoを理解しやすくするためのメモを紹介。
GeoDjangoで何ができる?
実は「何ができるのか?」がよくわからなくて、本当に困った。
なので「やってみて、はじめてわかった」ことも多かったりする。
GeoDjangoでこんなことができる。簡単に仕組みも書いておく。
- PostGISをバックエンドDBに指定する。
- 地図の表示
- 座標情報を扱うためのモデル群が充実している。
- 地図の上にピンを表示
- できる。ピンはPointオブジェクトとして表現する。
- 地図の上に範囲情報をマーキング
- できる。範囲情報をPolygonオブジェクトとして表現する。
- ピンを編集可能なアプリの開発。つまりメタ情報を編集したい。
- できる。Django Admin画面が標準で編集機能を持っている。
DjangoとGeoDjangoの違いは?
実はこの2つには、そこまで大きな違いがない。
と言っても、やったことない人にはなかなか理解できないだろう。
なので、ぼくがGeoDjangoを扱ってみて、気がついたことを述べていく。
- Djangoに、座標情報を扱うためのモデル定義を追加したのがGeoDjango
- Djangoに、座標情報を扱うデータベース接続機能を追加したのがGeoDjango
- 地理情報のGUIを扱うのはGeoDjangoではない。GeoDjango LeafletというパッケージがGUIを担当する。
あれ?本当にこれだけ?と思うかもしれない。本当にこれだけ。
さっそくやってみよう
いくつかGeoDjangoを使ってみよう!的な記事はあった。
でも、どれも説明が不鮮明だったり、データソースがリンク切れだったりと使えない。。。。
この記事が一番に「しっかりと」書かれていて、データソースも生きていた。
チュートリアルの第一回は「環境設定をしよう!」なので、環境設定が終わってる人はとばしていい。
チュートリアルの第二回からが本番
記事がしっかりしているので、これでいいと思う。なので、チュートリアルをやってみてわかったことをメモしていく。
setting.pyは通常のDjangoプロジェクトと同じで良い。
通常のDjangoならば、settings.pyにバックエンドDBの情報を書く。
GeoDjangoでも同じ。PostGISへの接続情報を書けば良い。
1 2 3 4 5 6 7 8 9 |
DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.postgis', 'NAME': 'postgis_db', 'USER': 'postgis_test', 'HOST': 'localhost', 'PASSWORD': 'devel' } } |
注意が必要なことは、次の2つ。
- NAMEがバックエンドDBのオーナー権限を持っていること
- バックエンドDBでpostgis EXTENSIONがすでに有効なこと
shapefileへのデータinsertはコマンドを使って実行
org2orgというコマンドがある。このコマンドを使えば、バックエンドDBに座標情報を書き込みできる。
ただし、注意点は「かならず先にmanage.py migrateをすること」。
どういうことかというと、次の仕組みになっている。
- manage.py migrateがモデルの定義情報をバックエンドDBに送る。バックエンドDBでテーブルを作成する。
- org2orgコマンドが作成済みのテーブルにshapefileをinsertする。
ここで注意したいことは、実はorg2orgコマンド単体でもinsert操作ができてしまうこと。
でも、単体でinsertしてしまうと、model定義と違うテーブルスキーマになってしまう。だから、GeoDjangoとの連携がうまくいかない。
編集可能な地図はDjango Admin管理画面を経由
チュートリアルの3番目では、地図を編集可能にする方法を紹介する。
なんも難しいことはない。GeoDjango Adminが標準で地図編集機能を提供している。
例えば、下の画像は地図が編集可能なことを示している。見た目はまんまDjango Admin画面である。

ここで少しハマったポイントがあった。
というのも、Admin画面にログインせずにこの画面を表示しようとしていた。なので、いつまでたってもエラーが出ていた。
開発途中では、ブラウザのセッション情報が古かったりすることがある。
こういうところは注意が必要。要するにただのボンミス。
ディスカッション
コメント一覧
まだ、コメントがありません