GeoDjangoに挑戦中 #2 地物管理まで
参考URL
https://homata.gitbook.io/geodjango/geodjango/import
PostGISテーブル
プロジェクト全体の設定で、使用するデータベースを指定します。(プロジェクト名)/settings.py
を変更します。
PostgreSQLをデフォルトデータベースに指定
DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.postgis', 'NAME': (データベース名), 'USER': (ユーザ名), 'HOST':'localhost', }, }
GISデータを使うようにする
プロジェクト全体の設定でGISデータ型を使用するようにします。(プロジェクト名)/settings.py
を変更します。
INSTALLED_APPS = [ ... 'django.contrib.gis', ... ]
psycopg2が必要
ModuleNotFoundError: No module named 'psycopg2'
と怒られたので py37-psycopg2 を入れました。
データモデル
仮定するfieldテーブル
ここでは次のテーブルがデータベースにあるとします。
CREATE TABLE field ( gid SERIAL PRIMARY KEY, name TEXT, geom GEOMETRY(POLYGON, 4612); );
modules.pyの作成
(アプリ名)/modules.py
を作成します。
from django.db import models from django.contrib.gis.db import models class Border(models.Model): gid = models.IntegerField(primary_key=True) name = models.TextField() geom = models.PolygonField(srid=4612) class Meta: db_table = 'field'
TEXT型(models.TextField()
)とVARCHAR型(models.CharField()
)とは別になっています。
djangoはテーブル名は(アプリ名)_(モデルクラス名)
と仮定します。変更するには、サブクラスMeta
を作り、db_table
フィールドにテーブル名を与えます。
また、djangoは主キーはid
と仮定し、モデルに存在しないなら自動追加します。shp2pgsqlからPostGISテーブルを作る場合には、デフォルトの主キーはgid
です。gidでprimary_key=True
とすることで、id
の自動追加は抑制されます。
admin.py の設定
(アプリ名)/admin.py
でBorder
クラスの管理方法を登録します。
from django.contrib.gis import admin from .models import Border admin.site.register(Border, admin.OSMGeoAdmin)
管理ツールで地物も管理できるようにする
(プロジェクト名)/urls.py
で既に管理ツールを実行できるようにしていると思いますが、これを少し変更します。
#from django.contrib import admin from django.contrib.gis import admin
url(r'^admin/', admin.site.urls)
のadmin
をdjango.contrib.gis.admin
に切り替えます。
アプリを登録
(プロジェクト名)/settigs.py
で次のようにアプリを登録します。
INSTALLED_APPS = [ ... (アプリ名), ... ]
登録しないと、全く動きません。