PostGISへデータインポート
テスト用のGeoJSONファイルをPostGISにインポートします。
使用データ
国土数値情報 ダウンロードサービス - http://nlftp.mlit.go.jp/ksj/index.htmlの北海道のデータを使用します
国土交通省国土政策局「国土数値情報(行政区域データ)」 (N03-170101_01_GML)
国土交通省国土政策局「国土数値情報(小学校区データ)」 (A27-16_01_GML)
国土交通省国土政策局「国土数値情報(公共施設データ)」 (P02-06_01_GML)
国土交通省国土政策局「国土数値情報(バス停留所データ)」 (P11-10_01_GML)
利用約款 国土数値情報利用約款 - http://nlftp.mlit.go.jp/ksj/other/yakkan.html
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/admin にアクセスし、ログインした後に表示を確認します。
テーブル一覧が表示されているのを確認します

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

geomフィールドをOpenStreetMapで表示
背景地図をOpenStreetMapに変更する為に、worldアプリの管理画面の設定を変更します。
OpenStreetMapでマップが表示されているのを確認します

django-leafletで管理画面のマップを表示
管理画面のマップをdjango-leafletで表示をします。
django-leafletをインストール
設定ファイルに追加
管理画面設定ファイルを変更
LeafletGeoAdminを登録します。
LeafletGeoAdminを継承したBorderAdminクラスを定義しこれを登録することで、検索・フィルタ機能の追加することが出来ます。
search_fields: 検索対象
list_filter: フィールド名がフィルタ対象
Note
django-leafletは管理画面以外にもいろいろな機能がありますので下記を参考にしてみて下さい。
django-leaflet - https://github.com/makinacorpus/django-leaflet
管理画面をタイトルを変更
設定ファイルのsettings.pyの設定で、管理画面のヘッダとタイトルを変更することが出来ます。
タイトル文字列の設定
または
worldアプリケーションのモデル定義のクラスにメタクラスを追加すると、管理画面のテーブル名称を見やすい形に変更することが出来ます。 テーブル名称は、単数と複数の2種類を指定出来ます。
モデルのタイトル文字列の設定
ログイン画面の例

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

Last updated