GeoDjango For Windows チュートリアル編その3
GeoDjango For Windows チュートリアル編その2の続きから
前回空間データのインポートと予告しましたが、モジュールから空間データを操作する方法に変更します。
前提
- 自分の環境ではIPythonがインストールされています。便利なのでインストールしてみてはいかがでしょうか。
- Python: C:\Python25
- GeoDjango: C:\Program Files\GeoDjango
- Project: C:\geodjango
とします。
専門用語等説明で怪しい部分があるので間違えている部分がありましたらご指摘下さい。
空間データを操作
まずはシェルモードでGeoDjangoにアクセスできるようにします。C:\Documents and Settings\USER>cd c:\geodjango C:\geodjango>manage.py shell
シェイプファイルのPathを生成します。
In [1]: import os In [2]: from geodjango import world In [3]: world_shp=os.path.abspath(os.path.join(os.path.dirname(world.__file__),'data/TM_WORLD_BORDERS-0.3.shp')) In [4]: world_shp Out[4]: 'C:\\geodjango\\world\\data\\TM_WORLD_BORDERS-0.3.shp'
Out[4]の結果が実際のファイルの位置と同じ位置であることを確認してください。
次に空間データのインスタンスを作成します。
In [5]: from django.contrib.gis.gdal import * In [6]: ds = DataSource(world_shp) In [7]: print ds C:\geodjango\world\data\TM_WORLD_BORDERS-0.3.shp (ESRI Shapefile)
Pythonから空間データを操作してみましょう。
レイヤー数を調べてみましょう。
In [8]: print len(ds) 1
レイヤー名を表示してみます。
In [9]: lyr = ds[0] In [10]: print lyr TM_WORLD_BORDERS-0.3
次にGeometoryとFeature項目を取得してみます。
In [11]: print lyr.geom_type Polygon In [12]: print len(lyr) 246
空間参照系情報を表示してみます。
In [13]: srs=lyr.srs In [14]: print srs GEOGCS["GCS_WGS_1984", DATUM["WGS_1984", SPHEROID["WGS_1984",6378137.0,298.257223563]], PRIMEM["Greenwich",0.0], UNIT["Degree",0.0174532925199433]] In [15]: print srs.proj4 +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
フィールド名を取得します。
In [16]: print lyr.fields ['FIPS', 'ISO2', 'ISO3', 'UN', 'NAME', 'AREA', 'POP2005', 'REGION', 'SUBREGION', 'LON', 'LAT']
次に各フィールドの型を表示してみます。
In [17]: [fld.__name__ for fld in lyr.field_types] Out[17]: ['OFTString', 'OFTString', 'OFTString', 'OFTInteger', 'OFTString', 'OFTInteger', 'OFTInteger', 'OFTInteger', 'OFTInteger', 'OFTReal', 'OFTReal']
地域と地理番号を表示してみましょう。
In [20]: for feat in lyr: ....: print feat.get('NAME'), feat.geom.num_points … India 5626 Iran (Islamic Republic of) 2193 Israel 281 Italy 2317 Cote d'Ivoire 906 Iraq 648 Japan 4450 … Saint Martin 15 Saint Barthelemy 14 Guernsey 18 Jersey 26 South Georgia South Sandwich Islands 338 Taiwan 363
レイヤーオブジェクトをスライスすることも可能です。
In [22]: lyr[0:2] Out[22]: [<django.contrib.gis.gdal.feature.Feature object at 0x022D7470>, <django.contrib.gis.gdal.feature.Feature object at 0x022D72D0>]
地域IDから地域名を取得することも可能です。
In [25]: feat=lyr[245] In [26]: print feat.get('NAME') Taiwan
日本はというと
In [27]: for n, feat in enumerate(lyr): ....: if feat.get('NAME')=='Japan': ....: print n, feat.get('NAME') ....: ....: 88 Japan In [28]: feat=lyr[88] In [29]: print feat.get('NAME') Japan
となります。
引き続き国境のデータを表示してみます。出力形式はWKTとGEOJSONです。
In [38]: geom=feat.geom In [39]: MULTIPOLYGON (((153.95858799999996 24.294997999999964,… In [40]: geom=feat.json In [41]: { "type": "MultiPolygon", "coordinates": [ [ [ [ 153.958588, 24.294998 ], …
次回こそ空間データのインポートを行います。