GeoDjangoのインストール

GISライブラリインストール (Windowsの場合のみ)

OSGeo4Wインストール

GeoDjangoが必要とする、GDAL(Geospatial Data Abstraction Library), GEOS (Geometry Engine, Open Source) ,PROJ4 (Cartographic Projections Library) ライブラリをOSGeo4Wインストーラでインストールしまします
OSGeo4Wインストーラを https://trac.osgeo.org/osgeo4w/wiki/OSGeo4W_jp からダウンロードして実行します。
「エクスプレス Web-GIS インストール」を選択して「次へ」をクリック
[パッケージの選択]リストで、[GDAL]のみを選択。MapServer等の他に選択肢を外して「次へ」をクリック
「依存関係に対応するパッケージをインストール(推奨)」をチェックして、「次へ」をクリック
「上記のライセンス条項に同意しました」をチェックして、「次へ」をクリック
パッケージが自動的にダウンロードされ、インストールされます。
インストールが終わったら「完了」をクリックして終了します。

環境変数設定 (Windowsの場合)

GeoDjangoを使用するには、OSGeo4Wディレクトリの情報をWindowsシステム環境変数に追加する必要があります。 コマンドプロンプトを新規に起動したときには下記のコマンドを実行して設定を追加します。
C:¥OSGeo4W64の場合
1
set POSTGRES_ROOT=C:¥Program Files¥PostgreSQL¥9.6
2
set OSGEO4W_ROOT=C:¥OSGeo4W64
3
set GDAL_LIBRARY_PATH=C:¥OSGeo4W64¥bin
4
set GDAL_DATA=%OSGEO4W_ROOT%¥share¥gdal
5
set PROJ_LIB=%OSGEO4W_ROOT%¥share¥proj
6
set PATH=%OSGEO4W_ROOT%¥bin;%POSTGRES_ROOT%¥bin;%PATH%;
Copied!
C:¥QGIS2の場合
1
set POSTGRES_ROOT=C:¥Program Files¥PostgreSQL¥9.6
2
set GDAL_LIBRARY_PATH=C:¥QGIS2¥bin
3
set GDAL_DATA=%OSGEO4W_ROOT%¥share¥gdal
4
set PROJ_LIB=%OSGEO4W_ROOT%¥share¥proj
5
set PATH=%OSGEO4W_ROOT%¥bin;%POSTGRES_ROOT%¥bin;%PATH%;
Copied!
Note
  • コマンドプロンプトのウィンドウを閉じると設定が無効になるます。
  • コマンドプロンプトを起動するたびに設定する必要がありますので、batファイルを作成しておくことをお勧めします。
  • 毎回設定するのが大変な場合は、システムの環境変数に直接設定をするとことも出来ます。
batファイルの例
1
$ vi genv.bat
2
3
@echo off
4
set POSTGRES_ROOT=C:\Program Files\PostgreSQL\9.6
5
set OSGEO4W_ROOT=C:¥OSGeo4W64
6
set GDAL_LIBRARY_PATH=C:¥OSGeo4W64¥bin
7
set GDAL_DATA=%OSGEO4W_ROOT%¥share¥gdal
8
set PROJ_LIB=%OSGEO4W_ROOT%¥share¥proj
9
set PATH=%OSGEO4W_ROOT%¥bin;%POSTGRES_ROOT%¥bin;%PATH%;
Copied!
settings.pyの例
1
$ vi プロジェクト名>\settings.py
2
3
import os
4
if os.name == 'nt':
5
import platform
6
POSTGRES = r"C:\Program Files\PostgreSQL\9.6"
7
OSGEO4W = r"C:\OSGeo4W"
8
if '64' in platform.architecture()[0]:
9
OSGEO4W += "64"
10
assert os.path.isdir(OSGEO4W), "Directory does not exist: " + OSGEO4W
11
12
os.environ['OSGEO4W_ROOT'] = OSGEO4W
13
os.environ['POSTGRES_ROOT'] = POSTGRES
14
os.environ['GDAL_LIBRARY_PATH'] = OSGEO4W + r"\bin"
15
os.environ['GEOS_LIBRARY_PATH'] = OSGEO4W + r"\bin"
16
os.environ['GDAL_DATA'] = OSGEO4W + r"\share\gdal"
17
os.environ['PROJ_LIB'] = OSGEO4W + r"\share\proj"
18
os.environ['PATH'] = OSGEO4W + r"\bin;" + POSTGRES + r"\bin;" + os.environ['PATH']
Copied!

環境設定のエラー対策 (Windowsの場合)

GDAL not installed (gdalxxx.dllが見つからない) エラー

GDALのライブラリが見つからない
1
django.core.exceptions.ImproperlyConfigured: Could not find the GDAL library (tried "gdal202", "gdal201", "gdal20", "gdal111", "gdal110", "gdal19"). Is GDAL installed? If it is, try setting GDAL_LIBRARY_PATH in your settings.
Copied!
GDALのライブラリが更新されている場合にエラーになることがあります。GDAL_LIBRARY_PATHのパスに"gdalxxx.dll"があるか確認をしてください。 GDALのライブラリが"gdal204.dll"に更新されていて、かつDjangoのバージョンが古い場合にはDjangoのソースにパッチをあててください。 このパッチはDjangoの最新版では既に対応済みですので、古いDjangoを使う場合のときだけに必要です。
ソースパッチは、Djangoのソースコードに「gdal204」を追加します。
「gdal204」追加する例
1
$ vi %PYTHON_ROOT%\Lib\site-packages\django\contrib\gis\gdal\libgdal.py
2
3
elif os.name == 'nt':
4
# Windows NT shared libraries
5
lib_names = ['gdal204', 'gdal202', 'gdal201', 'gdal20', 'gdal111', 'gdal110', 'gdal19']
Copied!
パッチをあてない場合は、GDALのバージョンを下げる必要があります。

"gdal204.dll"の代わりに"gdal111.dll"を使う場合

Djangoのソースを編集したくない場合は、"gdal204.dll"の代わりに"gdal111.dll"を使う方法があります。 QGISをインストールすると、GDALライブラリgdalxxxx.dllがインストールされるのでこれを使用します。 確認した時点では、QGIS 3.4.10 LTRをインストールすると"gdal111.dll"がインストールされます。

sqlite3.dllのコンフリクト

Windowsの場合、OSGeo4Wインストーラでgdalライブラリをインストールするとsqlite3.dllがインストールされます。 Pythonでもsqlite3.dllがインストールされるので、同名ファイルで衝突発生してエラーが発生する場合があります。 エラーになったら、Python側のenv¥Scripts¥sqlite3.dllの名前を変更して重複を避けてください
1
C:¥> ren env¥Scripts¥sqlite3.dll 000.sqlite3.dll
2
3
C:¥> dir env¥Scripts¥000.sqlite3.dll
4
ドライブ C のボリューム ラベルがありません。
5
ボリューム シリアル番号は 72DC-FA37 です
6
C:\Users\xxxx\Documents\geodjango\env\Scripts のディレクトリ
7
2018/06/12 15:08 1,153,176 000.sqlite3.dll
8
1 個のファイル 1,153,176 バイト
9
0 個のディレクトリ 89,404,837,888 バイトの空き領域
Copied!

OSGeo4WやQGIS2のPython2とのコンフリクト

OSGeo4W ShellやQGIS2の環境変数を設定した場合、OSGeo4WやQGISでインストールされているpythonが2系の為に、python.exeがコンフリクトする場合があります。
確認方法
1
C:¥> where python
2
C:¥QGIS2¥bin¥python.exe
3
C:¥Python36¥python.exe
Copied!
バージョン確認
1
C:¥> python -V
2
Python 2.1.17
3
4
C:¥> dir C:¥QGIS2¥bin¥python*.*
5
:
6
2017/09/17 03:27 python.exe
7
2017/09/17 03:27 python27.dll
8
:
Copied!
その場合には利用するPython3を有効にするために、パスの優先順位を変更するか、python3.exeファイルを利用する。
優先順位の変更例
python3のあるディレクトリーをPATHの一番最初に設定し、仮想環境のパッケージのディレクトリをPYTHONPATHに設定する
1
set PATH=<仮想環境実行ディレクトリ>¥env¥bin;%PATH%;
2
set PYTHONPATH=<仮想環境実行ディレクトリ>¥env¥lib¥python3.6¥site-packages
3
4
例)
5
set PATH=C:¥Users¥xxxx¥Documents¥geodjango¥env¥bin;%PATH%;
6
set PYTHONPATH=C:¥Users¥xxxx¥Documents¥geodjango¥env¥lib¥python3.6¥site-packages
Copied!

PostGISのデータベースを作成

PostGISのデータベースを作成します。データベースは「geodjangodb」とい名前で作成します。
データベース作成
1
(env) $ createdb -U postgres -E UTF-8 geodjangodb
2
パスワード:
Copied!
PostGISのエクステンションを作成
1
(env) $ psql -U postgres -d geodjangodb -c "CREATE EXTENSION postgis;"
2
ユーザ postgres のパスワード:
3
CREATE EXTENSION
Copied!
エクステンションの確認
1
(env) $ psql -U postgres -d geodjangodb -c "select * from pg_available_extensions;"
2
ユーザ postgres のパスワード:
3
name | default_version | installed_version | comment
4
--------+--------------+-------------------+------------------------------
5
   :
6
postgis | 2.3.7 | 2.3.7 | PostGIS geometry, geography, and raster spatial types and functions
Copied!
データベースの確認
1
(env) $ psql -U postgres -l
2
ユーザ postgres のパスワード:
3
データベース一覧
4
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権
5
-------------+----------+------------------+--------------------+--------------------+-----------------------
6
geodjangodb | postgres | UTF8 | Japanese_Japan.932 | Japanese_Japan.932 |
7
postgres | postgres | UTF8 | Japanese_Japan.932 | Japanese_Japan.932 |
8
template0 | postgres | UTF8 | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres +
9
| | | | | postgres=CTc/postgres
10
template1 | postgres | UTF8 | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres +
11
| | | | | postgres=CTc/postgres
12
(4 行)
Copied!

アプリケーション作成

マップ表示をするアプリケーションの作成をします。
アプリケーション作成コマンド $ python manage.py startapp <アプリケーション名>
1
(env) $ python manage.py startapp world
Copied!
ファイル構成
1
geodjango <-- プロジェクトのルート
2
├── manage.py <-- プロジェクトの管理用のスクリプト
3
├── geodjango <-- プロジェクト設定
4
│ ├── __init__.py <-- Pythonの初期化パッケージファイル
5
│ ├── settings.py <-- プロジェクトの設定ファイル
6
│ ├── urls.py <-- プロジェクトのURLパターン設定ファイル
7
│ └── wsgi.py <-- プロジェクトのWSGI(ウィズギー)インターフェース設定ファイル
8
└── world <-- アプリケーションディレクトリ
9
├── __init__.py <-- Pythonの初期化パッケージファイル
10
├── admin.py <-- 管理サイトの設定ファイル
11
├── apps.py <-- アプリケーションの設定ファイル
12
├── migrations <-- データベースのマイグレーションファイル
13
│ └── __init__.py <-- Pythonの初期化パッケージファイル
14
├── models.py <-- モデル定義のファイル
15
├── tests.py <-- テストの記述するファイル
16
└── views.py <-- ビューを記述するファイル
Copied!

psycopg2をインストール

psycopg2 Pythonモジュールは、PythonとPostgreSQLデータベース間のインタフェースライブラリです。 下記のバイナリーバージョンをインストールします。
バイナリーバージョンの場合
1
(env) $ pip install psycopg2-binary
2
-> psycopg2-binary==2.7.4
Copied!
コンパイルバージョンの場合
1
(env) $ pip install psycopg2
Copied!

データベースとアプリケーションの設定

データベースのENGINEをPostGISに変更とアプリケーションの追加をします。
設定ファイル「geodjango/settings.py」を編集します。
1
(env) $ vi geodjango/settings.py
2
# django.contrib.gis.db.backends.postgisに変更
3
DATABASES = {
4
'default': {
5
'ENGINE': 'django.contrib.gis.db.backends.postgis', <-- 変更
6
'NAME': 'geodjangodb', <-- 変更 データベース名
7
'USER': 'postgres', <-- 追加 ユーサ名
8
'HOST':'localhost', <-- 追加 ホスト名
9
'PASSWORD': 'xxxxxxxx', <-- 追加 パスワード
10
}
11
}
12
#'django.contrib.gis'と'world'を追加。
13
INSTALLED_APPS = (
14
'django.contrib.admin',
15
'django.contrib.auth',
16
'django.contrib.contenttypes',
17
'django.contrib.sessions',
18
'django.contrib.messages',
19
'django.contrib.staticfiles',
20
'django.contrib.gis', <-- 追加
21
'world.apps.WorldConfig', <-- 追加 (obsolete: world)
22
)
Copied!
PostGISのデータベースにテーブルを作成します。
1
(env) $ python manage.py migrate
2
Operations to perform:
3
Apply all migrations: admin, auth, contenttypes, sessions
4
Running migrations:
5
Applying contenttypes.0001_initial... OK
6
Applying auth.0001_initial... OK
7
Applying admin.0001_initial... OK
8
Applying admin.0002_logentry_remove_auto_add... OK
9
Applying contenttypes.0002_remove_content_type_name... OK
10
Applying auth.0002_alter_permission_name_max_length... OK
11
Applying auth.0003_alter_user_email_max_length... OK
12
Applying auth.0004_alter_user_username_opts... OK
13
Applying auth.0005_alter_user_last_login_null... OK
14
Applying auth.0006_require_contenttypes_0002... OK
15
Applying auth.0007_alter_validators_add_error_messages... OK
16
Applying auth.0008_alter_user_username_max_length... OK
17
Applying auth.0009_alter_user_last_name_max_length... OK
18
Applying sessions.0001_initial... OK
Copied!
PostGISに管理画面にログイン権限のある管理ユーザのアカウントを作成します。 Webアプリ起動されていたら、CTRL+Cで一旦止めます
管理ユーザのアカウントを作成します
1
(env) $ python manage.py createsuperuser
2
Username (leave blank to use 'xxxxx'): admin
3
Email address: [email protected]
4
Password: xxxxxx
5
Password (again): xxxxxx
6
Superuser created successfully.
Copied!