国土数値情報 行政区域データをGeoDjangoに取り込み
上記から行政区画データをダウンロードし、GeoDjangoから扱えるようにするための手順。
postgisはインストール済みとする。
地図情報のダウンロード
"全国"をクリックし最新の"N03-20150101_GML.zip"をダウンロード。
sqlファイル作成
上記を参考にsqlファイルを作成
shp2pgsql -s 4612 -D -i -I -W cp932 ~/Desktop/N03-20150101_GML/N03-15_150101.shp gisdata > ~/Desktop/gisdata.sql
参考サイトではJPGISからシェープファイルに変換する手順が必要とあるが、ダウンロードしたファイルに含まれていたのでそれを使用した。
既存のデータベースにデータを投入
psql postgres -f ~/Desktop/gisdata.sql
modelを定義
from django.contrib.gis.db import models class GisData(models.Model): gid = models.IntegerField(primary_key=True) n03_001 = models.CharField(max_length=10) n03_002 = models.CharField(max_length=20) n03_003 = models.CharField(max_length=20) n03_004 = models.CharField(max_length=20) n03_007 = models.CharField(max_length=5) geom = models.MultiPolygonField(spatial_index=True, srid=4612) objects = models.GeoManager() class Meta: db_table = 'gisdata' def __str__ (self): params = { 'gid': self.gid, 'n03_001': self.n03_001, 'n03_002': self.n03_002, 'n03_003': self.n03_003, 'n03_004': self.n03_004, 'n03_007': self.n03_007, } return '<GisData({gid}) n03_001:{n03_001} n03_002:{n03_002} n03_003:{n03_003} n03_004:{n03_004} n03_007:{n03_007}>'.format(**params)
使用方法
>>> from django.contrib.gis.geos import Point >>> from gisdata.models import GisData >>> point = Point(139.699578, 35.659531) # 渋谷駅周辺の座標 >>> r = GisData.objects.filter(geom__contains=point) >>> print(r[0]) <GisData(32097) n03_001:東京都 n03_002:None n03_003:渋谷区 n03_004:None n03_007:13113>
上記の感じで取得する。
あまりドキュメントを読まずにやったので、何か間違いがあるかも。