GeoDjangoで地図表示Webアプリを作ろう

02/10/2021

A8バナー広告

こんなことを書く

  • GeoDjangoを使って地図表示&編集アプリのチュートリアルを紹介。
  • Django経験者がGeoDjangoを理解しやすくするためのメモを紹介。

GeoDjangoで何ができる?

実は「何ができるのか?」がよくわからなくて、本当に困った。

なので「やってみて、はじめてわかった」ことも多かったりする。

GeoDjangoでこんなことができる。簡単に仕組みも書いておく。

  • PostGISをバックエンドDBに指定する。
  • 地図の表示
    • 座標情報を扱うためのモデル群が充実している。
  • 地図の上にピンを表示
  • 地図の上に範囲情報をマーキング
  • ピンを編集可能なアプリの開発。つまりメタ情報を編集したい。
    • できる。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への接続情報を書けば良い。

注意が必要なことは、次の2つ。

  1. NAMEがバックエンドDBのオーナー権限を持っていること
  2. バックエンドDBでpostgis EXTENSIONがすでに有効なこと

shapefileへのデータinsertはコマンドを使って実行

org2orgというコマンドがある。このコマンドを使えば、バックエンドDBに座標情報を書き込みできる。

ただし、注意点は「かならず先にmanage.py migrateをすること」。

どういうことかというと、次の仕組みになっている。

  1. manage.py migrateがモデルの定義情報をバックエンドDBに送る。バックエンドDBでテーブルを作成する。
  2. org2orgコマンドが作成済みのテーブルにshapefileをinsertする。

ここで注意したいことは、実はorg2orgコマンド単体でもinsert操作ができてしまうこと。

でも、単体でinsertしてしまうと、model定義と違うテーブルスキーマになってしまう。だから、GeoDjangoとの連携がうまくいかない。

編集可能な地図はDjango Admin管理画面を経由

チュートリアルの3番目では、地図を編集可能にする方法を紹介する。

なんも難しいことはない。GeoDjango Adminが標準で地図編集機能を提供している。

例えば、下の画像は地図が編集可能なことを示している。見た目はまんまDjango Admin画面である。

ここで少しハマったポイントがあった。

というのも、Admin画面にログインせずにこの画面を表示しようとしていた。なので、いつまでたってもエラーが出ていた。

開発途中では、ブラウザのセッション情報が古かったりすることがある。

こういうところは注意が必要。要するにただのボンミス。