PostGISへデータインポート

テスト用のGeoJSONファイルをPostGISにインポートします。

使用データ

国土数値情報 ダウンロードサービス - http://nlftp.mlit.go.jp/ksj/index.htmlarrow-up-rightの北海道のデータを使用します

利用約款 国土数値情報利用約款 - http://nlftp.mlit.go.jp/ksj/other/yakkan.htmlarrow-up-right

GeoJSONに変換をしたファイルの大きさ

  • 国土数値情報 行政区域データ (hokkaido.geojson (63.4MB)

  • 国土数値情報 小学校区データ (elementary_school.geojson (196KB))

  • 国土数値情報 公共施設データ (public_facility.geojson (3.3MB))

  • 国土数値情報 バス停留所データ (busstop.geojson (13.9MB))

一括データダウンロード

GeoJSONデータのモデル構造を調べる

Modelクラスを定義するために、GeoJSONデータの内容を調べてる必要があります。 手動でも構造は調べられますが、管理コマンドの「ogrinspect」を利用して自動で構造を調べます。 ogrinspectコマンドはデータファイルを解析して、モデルで定義出来る形式に自動生成してコンソールに出力します。

ogrinspectコマンド $ python manage.py ogrinspect <データファイル> <モデル名>

注意

  • ogrinspectでGeoJSONデータを調べた場合には”models.CharField(max_length=0)”のようにmax_lengthが0になります。Modelに記述する場合にはmax_lenghに最大値の長さを設定してください。((例)max_length=100)

行政区域データ

小学校区データ

公共施設データ

バス停留所データ

Note

  • コマンドパラメータは「$ python manage.py ogrinspect --help」を入力するとヘルプが表示されます。

GeoJSONデータのモデル定義

worldアプリケーションのmodels.pyに、GeoJSONの定義でを記述します。

  • str() にクラスの名称文字列を定義

  • CharFieldの長さが「max_length=0」になっているので「max_length=50〜256」に変更。シェープファイルではmax_lengthが出力されるがGeoJSONの場合出力されない

モデルのマイグレーションファイルを作成

データベースの更新をするために、マイグレーションファイルを作成します。 makemigrationsは、モデルの変更内容をデータベースに反映するための命令ファイルを作成します。

データベースのマイグレーションファイル作成 $ python manage.py makemigrations

データベースのテーブル更新

データベースのテーブルを更新します。 migrateは、モデルの変更内容をデータベースに反映します。

データベースのマイグレーション $ python manage.py migrate

データインポート

GeoJSONファイルのデータをインポートをするスクリプトファイルを作成し、これを実行してデータをインポートします。 インポートにはユーティリティのdjango.contrib.gis.utils.LayerMappingを利用します。

Note GDALのコマンドラインユーティリティを利用してインポートすることも出来ます。

  • ogr2ogr: GDALのコマンドラインユーティリティ

  • shp2pgsql: ESRI shapefile用のユーティリティ

行政区域データ

行政区域データのインポートスクリプトを作成します

Djangoのシェルを起動して、ここからインポートスクリプトを実行します。

小学校区データ

小学校区データのインポートスクリプトを作成します

Djangoのシェルを起動して、ここからインポートスクリプトを実行します。

公共施設データ

公共施設データのインポートスクリプトを作成します

Djangoのシェルを起動して、ここからインポートスクリプトを実行します。

バス停留所データ

バス停留所データのインポートスクリプトを作成します

Djangoのシェルを起動して、ここからインポートスクリプトを実行します。

管理画面の設定変更

管理画面でマップ表示するように変更をします.

geomフィールドをマップ表示

geomフィールドをマップ表示するように変更します。 (powered by OpenLayers) worldアプリケーションの管理画面の設定を変更します。

URL.confの参照モジュールをGISモジュールに変更します。

Webサーバを起動します。

ブラウザからURL: http://127.0.0.1:8000/adminarrow-up-right にアクセスし、ログインした後に表示を確認します。

テーブル一覧が表示されているのを確認します

項目を選択して、geomフィールドがマップ表示されているのを確認します

geomフィールドをOpenStreetMapで表示

背景地図をOpenStreetMapに変更する為に、worldアプリの管理画面の設定を変更します。

OpenStreetMapでマップが表示されているのを確認します

django-leafletで管理画面のマップを表示

管理画面のマップをdjango-leafletで表示をします。

django-leafletをインストール

設定ファイルに追加

管理画面設定ファイルを変更

LeafletGeoAdminを登録します。

LeafletGeoAdminを継承したBorderAdminクラスを定義しこれを登録することで、検索・フィルタ機能の追加することが出来ます。

  • search_fields: 検索対象

  • list_filter: フィールド名がフィルタ対象

Note

管理画面をタイトルを変更

設定ファイルのsettings.pyの設定で、管理画面のヘッダとタイトルを変更することが出来ます。

タイトル文字列の設定

または

worldアプリケーションのモデル定義のクラスにメタクラスを追加すると、管理画面のテーブル名称を見やすい形に変更することが出来ます。 テーブル名称は、単数と複数の2種類を指定出来ます。

モデルのタイトル文字列の設定

ログイン画面の例

管理画面のテーブル一覧画面の例

Last updated