常山日記 RSSフィード Twitter

2009-02-04

[][]GeoDjango For Windows チュートリアル編その2 21:03 GeoDjango For Windows チュートリアル編その2を含むブックマーク GeoDjango For Windows チュートリアル編その2のブックマークコメント

GeoDjango For Windows チュートリアル編その1の続きです。

ここではGISなどの専門用語等の説明は無視して動作することを目的とします。


地理データ取得

まずは国境などの地理データをここからダウンロードします。

置き場所は"world"アプリケーション直下に"data"フォルダを作成し、解凍し保存します。

C:\geodjango\world\data


ogrinfoを使って空間データを調べる

ogrinfoはシェイプファイルのメタデータを調べるユーティリティです。

C:\Program Files\GeoDjango\bin以下にあります。

ogrinfoを使用してTM_WORLD_BORDERS-0.3.shpの中身を見てみましょう。

C:\Program Files\GeoDjango\bin>ogrinfo.exe c:\geodjango\world\data\TM_WORLD_BORDERS-0.3.shp
INFO: Open of `c:\geodjango\world\data\TM_WORLD_BORDERS-0.3.shp'
      using driver `ESRI Shapefile' successful.
1: TM_WORLD_BORDERS-0.3 (Polygon)

という結果が表示されると思います。

これにより、シェイプファイルはPolygonデータを持ったレイヤーが一つあることがわかります。

このレイヤーを詳しく調べてみましょう。

C:\Program Files\GeoDjango\bin>ogrinfo.exe -so c:\geodjango\world\data\TM_WORLD_BORDERS-0.3.shp TM_WORLD_BORDERS-0.3
INFO: Open of `c:\geodjango\world\data\TM_WORLD_BORDERS-0.3.shp'
      using driver `ESRI Shapefile' successful.

Layer name: TM_WORLD_BORDERS-0.3
Geometry: Polygon
Feature Count: 246
Extent: (-180.000000, -90.000000) - (180.000000, 83.623596)
Layer SRS WKT:
GEOGCS["GCS_WGS_1984",
    DATUM["WGS_1984",
        SPHEROID["WGS_1984",6378137.0,298.257223563]],
    PRIMEM["Greenwich",0.0],
    UNIT["Degree",0.0174532925199433]]
FIPS: String (2.0)
ISO2: String (2.0)
ISO3: String (3.0)
UN: Integer (3.0)
NAME: String (50.0)
AREA: Integer (7.0)
POP2005: Integer (10.0)
REGION: Integer (3.0)
SUBREGION: Integer (3.0)
LON: Real (8.3)
LAT: Real (7.3)

このような構成でデータは作成されています。

上記の構成を基にmodelを作成します。


model作成

"world"アプリのmodels.pyを編集します。

# -*- encoding:utf-8 -*-

from django.contrib.gis.db import models

class WorldBorders(models.Model):
    name = models.CharField(max_length=50)
    area = models.IntegerField()
    pop2005 = models.IntegerField('Population 2005')
    fips = models.CharField('FIPS Code', max_length=2)
    iso2 = models.CharField('2 Disit ISO', max_length=2)
    iso3 = models.CharField('3 Digit ISO', max_length=3)
    un = models.IntegerField('United Nations Code')
    region = models.IntegerField('Region Code')
    subregion = models.IntegerField('Sub-Region Code')
    lon = models.FloatField()
    lat = models.FloatField()
    
    mpoly = models.MultiPolygonField()
    objects = models.GeoManager()
    
    class Meta:
        verbose_name_plural = "World Borders"
    
    def __unicode__(self):
        return self.name

注意する点は、

  • from django.contrib.gis.db import models
  • objects = models.GeoManager()

となっていることです。


syncdbを実行してみる

まずどのようなSQLを発行するか調べてみましょう。

C:\geodjango>manage.py sqlall world
BEGIN;
CREATE TABLE "world_worldborders" (
    "id" serial NOT NULL PRIMARY KEY,
    "name" varchar(50) NOT NULL,
    "area" integer NOT NULL,
    "pop2005" integer NOT NULL,
    "fips" varchar(2) NOT NULL,
    "iso2" varchar(2) NOT NULL,
    "iso3" varchar(3) NOT NULL,
    "un" integer NOT NULL,
    "region" integer NOT NULL,
    "subregion" integer NOT NULL,
    "lon" double precision NOT NULL,
    "lat" double precision NOT NULL
)
;
SELECT AddGeometryColumn('world_worldborders', 'mpoly', 4326, 'MULTIPOLYGON', 2);
ALTER TABLE "world_worldborders" ALTER "mpoly" SET NOT NULL;
CREATE INDEX "world_worldborders_mpoly_id" ON "world_worldborders" USING GIST ("mpoly" GIST_GEOMETRY_OPS );
COMMIT;

では、DBに反映させましょう。

C:\geodjango>manage.py syncdb
Creating table world_worldborders
Installing custom SQL for world.WorldBorders model

PgAdmin3で確認してみてください。

上記のメッセージと"world_worldborders"テーブルが作成されていれば成功です。


次は空間データのインポートから始めます。

[]巡回 15:14 巡回を含むブックマーク 巡回のブックマークコメント

遊休スペースのオーナーと利用者をウェブでマッチングする「軒先.com」

Kiva: Making a difference with a new API

200種類以上収録!美しい背景パターン集「200+ Beautiful Seamless Patterns Perfect for Web Design」

Clear And Effective Communication In Web Design

javascriptでgetYear()の値がFirefoxとIEで異なる

Gmailのメール整理が「移動」と「ラベル」ボタン追加によって より便利に

ヴイエムウェア、仮想デスクトップクライアントをオープンソース化

GPSケータイに近隣のスイーツ情報配信、SNSサイト「スイーツ探検隊」

そのパケットは、どこから来たのか? - 徹底攻略!トレースバック技術

PRサイト作成前に、知っておくべきこと - 効果がでる!PRサイトの作り方

Google Reader で広告エントリを取り除く Greasemonkey ユーザスクリプト 再々掲

GmailのToDoリストをFirefoxのサイドバーへ表示

Gmail、新しいラベル機能の使い方

あなたの書いた文字をTrueTypeフォント化する「YourFonts」

Dojo ToolkitのDataGridを使いこなす

グラフィカルにクエリーを構築&レポート出力「Wabit」

Firefox上でルータのステータスを確認できるアドオン「Router Status」

【Firefox 3.0.6】リリース。重要度最高のセキュリティ問題などを修正。

MS、"XP"から"7"へのアップグレードライセンスも提供へ

Yahoo!みんなの検定 ガジェットの開発事例取材レポート

Rackを統合した「Ruby on Rails 2.3.0」のRC1がリリース

無料で、自分でプリントする名刺が作成できるオンラインサービス

[]巡回 01:24 巡回を含むブックマーク 巡回のブックマークコメント

マピオンのiPhoneアプリ「DGRadar」を試す

LatLongLabのiPhoneアプリ「シャカ地図」を試す

The iPhone Springboard in xHTML, CSS and jQuery

Mac OSXで"200"ものアプリを起動させExpose'

次期iPhoneは6月発売?!

GoogleのタスクリストがiPhoneに対応

第2世代iPod Touch対応の脱獄ツール公開

[iPhoneアプリ評価]巡回サイトのランチャーとして活用 - WebApps1.1

[iPhone雑記]GoogleAnalyticsをEvernote経由で見る

[iPhoneアプリ評価]USアカでLast.fm(無料)をゲット♪ - 音楽SNS

[iPhone雑記]iTunesのUSアカウントを作ってUS無料アプリを!

Gmailでタスク管理ができる「Gmail Tasks」がiPhoneに対応

iPhoneに保護フィルムを失敗なく貼る方法。

Adobeが「やらないか」AppleとiPhone用FLASHを共同開発中らしい。

「傾けても回転しない」寝ながら使えるiPhone・iPod touch用ブラウザ『dharma』 - 今日のアプリ第338回

エキサイト、『イズム』『ガルボ』『コネタ』の最新記事が読めるアプリをリリース

連鎖落ちゲーの大御所がついに登場『ぷよぷよフィーバーTOUCH』 - 今日のアプリ第337回

FW2.2.1に対応したMac用PwnageToolがリリース

就職活動でもう道に迷わない!「iPod Touch + FON」

起きた地震をすぐ確認できる地震関連 iPhone アプリ、「今日の地震」「Epicentral」

iPhone でテキストエリア内でスクロールするには二本指で!

予定が追加できるようになった、 iPhone 版の Google Calendar

詳細予定の部分にそのまま地図が表示できる Google Calendar

iPhoneアプリ向けクラッシュレポート機能「Plausible CrashReporter」登場

素早くiCalに予定を登録する「QuickCal Widget」

iPhone用ユニットテストフレームワーク「iUnitTest」

ボーカロイド総登場の無料パズルゲームがiPhoneで遊べる

iPhone/touch用のアプリ不正使用ツールCrackulousでJB界に衝撃

オプトマポケットプロジェクターPK101用iPod/iPhone用AVケーブル

iPhone SIMアンロック派はアップデートにご注意を

iPhone上のファイルを、ついにBluetoothでワイヤレス転送可能に(動画)

今週の注目オンラインソフト for Mac OS X 46 シンプルでてきぱき書けるマインドマッピングツール「MindNode」

OS X ハッキング! 310 Leopardのリモートデスクトップ機能をあれこれイジる

世界iPhoneアプリランキング

トラックバック - http://d.hatena.ne.jp/johzan/20090204