自動化無しに生活無し

WEBとかAIとかLinux関係をひたすら書く備忘録系ブログ

【地理空間情報】GeoDjangoの実装方法【PostGIS+PostgreSQL+国土地理院データ】

thumbnail

圧倒的に日本語の情報、及びソースコードが不足しているgeodjangoについてまとめています。(勉強してすぐにまとめているので、多少間違いがあるかも。)

Ubuntu 18.04 LTS にて動作確認済み。

流れ

  1. Djangoのインストール
  2. PostgreSQLのインストール
  3. GEOS、GDAL、PROJ4、PostGISのインストール
  4. プロジェクトの作成
  5. アプリの作成
  6. settings.pyの書き換え
  7. models.pyの書き換え
  8. 国土交通省のデータをDL
  9. 地理空間情報の読み込み
  10. admin.pyの書き換え
  11. 開発用サーバーの起動

Djangoのインストール

sudo pip3 install django
Copy

PostgreSQLのインストール

# PostgreSQL
sudo apt install postgresql-10
sudo apt install postgresql-client-10
sudo apt install postgresql-client-common postgresql-common 
sudo apt install postgresql-contrib
sudo apt install pgadmin3
sudo apt install postgresql-server-dev-10
# PostgreSQL for Python projects
sudo apt install python-psycopg2
sudo apt install python3-psycopg2
Copy

GEOS、GDAL、PROJ4、PostGISのインストール

まずGEOSから。

cd /usr/local/ 
sudo mkdir geos 
sudo chown $USER geos 
cd geos
wget http://download.osgeo.org/geos/geos-3.5.1.tar.bz2
tar -xvjof geos-3.5.1.tar.bz2
cd geos-3.5.1
./configure --enable-python
make
sudo make install
Copy

次、GDAL。

sudo apt install gdal-bin 
sudo apt install libgdal-dev 
sudo apt install libgdal1-dev
sudo apt install python-gdal
sudo apt install python-geopandas
sudo apt install python3-gdal
sudo apt install python3-geopandas
Copy

PROJ4のインストール。

cd /usr/local/
sudo mkdir proj
sudo chown $USER proj
cd proj
wget http://download.osgeo.org/proj/proj-5.1.0.tar.gz
tar -xzvof proj-5.1.0.tar.gz
cd proj-5.1.0
./configure
make
sudo make install
Copy

PostGISのインストール。

sudo apt install libxml2-dev
cd /usr/local/
sudo mkdir postgis
sudo chown $USER postgis
cd postgis
wget http://download.osgeo.org/postgis/source/postgis-2.4.4.tar.gz
tar -xzvof postgis-2.4.4.tar.gz
cd postgis-2.4.4
./configure --with-projdir=/usr/local/proj/proj-5.1.0 --with-pgconfig=/usr/bin/pg_config --with-xml2config=/usr/bin/xml2-config
make
sudo make install
Copy

プロジェクトの作成

mkdir geodjango
django-admin startproject config .
Copy

アプリの作成

python3 manage.py startapp mapping 
Copy

settings.pyの書き換え

INSTALLED_APPSに下記を追加

'django.contrib.gis',
'mapping.apps.MappingConfig',
Copy

DATABASESを書き換え

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': '',
        'USER': '',
        'HOST':'',
        'PASSWORD': '',
    },
}
Copy

models.pyの書き換え

from django.contrib.gis.db import models
class Border(models.Model):
    n03_001 = models.CharField(max_length=10,null=True,blank=True)
    n03_002 = models.CharField(max_length=20,null=True,blank=True)
    n03_003 = models.CharField(max_length=20,null=True,blank=True)
    n03_004 = models.CharField(max_length=20,null=True,blank=True)
    n03_007 = models.CharField(max_length=5,null=True,blank=True)
    geom     = models.PolygonField(srid=6668)
Copy

国土交通省のデータをDL

https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-v2_3.html#prefecture00 から、N03-190101_GML.zipをDL

地理空間情報の読み込み

アプリの中に読み込み用のスクリプトを作る。load.py

# -*- coding: utf-8 -*-
import os
from django.contrib.gis.utils import LayerMapping
from mapping.models import Border
# Modelとシェープファイルのカラムのマッピング
border_mapping = { 
    'n03_001' : 'N03_001',
    'n03_002' : 'N03_002',
    'n03_003' : 'N03_003',
    'n03_004' : 'N03_004',
    'n03_007' : 'N03_007',
    'geom' : 'POLYGON',
}
# シェープファイル
border_shp = os.path.abspath(
    os.path.join(os.path.dirname(__file__), 'data', 'N03-19_190101.shp'),
)
def run(verbose=True):
    lm = LayerMapping(Border, border_shp, border_mapping, transform=False, encoding='UTF-8')
    lm.save(strict=True, verbose=verbose)
Copy

アプリディレクトリ内にdataディレクトリを作り、その中に先程DLしたシェープファイルを配置する。

python3 manage.py shell を実行。下記を入力してload.pyを実行する。

from data import load
load.run()
Copy

admin.pyの書き換え

admin.pyに下記を記入

from django.contrib.gis import admin
from .models import Border

admin.site.register(Border,admin.OSMGeoAdmin)
Copy

開発用サーバーの起動

python3 manage.py runserver 127.0.0.1:8000
Copy

管理サイトに入り。下記画像が表示されれば成功。

スポンサーリンク

シェアボタン

Twitter LINEで送る Facebook はてなブログ