2009-02-04
■[Django][GeoDjango]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
注意する点は、
となっていることです。
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"テーブルが作成されていれば成功です。
次は空間データのインポートから始めます。
■[その他]巡回

gumi、携帯向けSNS「gumi」でイラスト画像などデジタルギフト提供機能搭載
Lovely Charts: いろいろなチャートが簡単に作成できるサービス
不況に嬉しい「わけあり」な商品を販売している通販サイトまとめ
Gmailのラベル機能が進化 フォルダ感覚で使えるようになった
PVダラ見に最適な「ミュージックナビ」にお気に入り機能が追加
プロファイル豊富&クロップ可な動画変換「XMedia Recode」
現在地からトイレ情報を検索できる「Check A Toilet ウィジェット」
KivaがAPIを公開して社会派デベロッパたちの積極利用を期待
Firefox拡張 Dropfox 0.3.0 - JavascriptからbashやPowerShellのコマンドが実行可能に
デルが放つ低価格スリムノート「Inspiron Mini 12」の中味を拝見した (1/2)
印刷用のチェックリストを作るためだけのスーパーシンプルなツール『Printable Checklist』
■[Mac]巡回

Incase、ユニボディMacBook/Pro専用の保護ケース
iPhone 3G用保護ケース iSkin solo/solo FX
OS X入りネットブック vs. iBook G4 vs. MacBook Air ベンチマーク対決
遠隔操作でiPhoneからイタズラ音を出せる『Remote Sound Box』 - 今日のアプリ第339回
■[その他]巡回

遊休スペースのオーナーと利用者をウェブでマッチングする「軒先.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のサイドバーへ表示
あなたの書いた文字をTrueTypeフォント化する「YourFonts」
Firefox上でルータのステータスを確認できるアドオン「Router Status」
【Firefox 3.0.6】リリース。重要度最高のセキュリティ問題などを修正。
MS、"XP"から"7"へのアップグレードライセンスも提供へ
■[jQuery]巡回

スムーズにスクロールするカルーセルJavaScript「Just Another Carousel」
15 jQuery Plugins to Fix and Beautify Browser Issues
■[Django]巡回

Django Snippets:
django under apache / mod_fcgid
Google Code:
django-solr-search Django module for integrating solr search.
django-modular Easy site modules for Django
django-tube Broadcast yourself... with Django.
sorl-thumbnail Thumbnails for Django
repsheet RepSheet the code GeoDjango!
Blog:
Pegadinha do Djangão: form não salva Many to Many com commit=False
django template tag for active CSS class
Django Sitemaps and a Better ping_google Function
Django Tutorial Screencasts & Videos
django-saas Reusable Django application for hosted services
djime A Django-based time-tracker I'm working on.
cheatsheet of forms.Form for django
Djblets 0.5alpha2 A collection of useful classes and functions for Django
■[Mac]巡回

[iPhone][iPhoneSDK] iPhoneアプリを作ってみよう:番外編 コメントへの回答エントリー(UIViewの中にUIViewを配置)
■[CSS][その他]巡回

Online Chemical Molecular Editor Powered by Dojo
Astrodeo、みんなで作る温泉情報CGM「温泉データベース」
「Skype 4.0 for Windows」が正式リリース,ビデオ・チャット機能を強化
ビデオ通話を前面に押し出していく Skype 4.0 Gold がついにリリース
■[Django]巡回

Django Snippets:
Blog:
Some Simple Django Debugging Tools
MEDIA_URL and context from processors available in HTTP 500 template
Migrating Django from Apache to lighttpd using FastCGI
[flex][django] yui-frameworks でとりあえず Django AMF を使ってみた
[Python][Mobile]uamobile 0.2を考える(1)
Intro to Django - Building a To-Do List
Django Site of the Week: Deskography
ratelimitcache A memcached backed rate limiting decorator for Django.
【インストール編】Django 初心者がコミュニティサイト的な何かにチャレンジしてみる
■[Python]巡回

[Python]PyGTKでシステムトレイのアイコンを切り換える(前半)
[Python]PyGTKでシステムトレイのアイコンを切り換える(後半)
[python][Dropbox]OSXのデスクトップをDropBoxで共有(同期)するぞ
[python]time.strptimeがエラー起す謎-原因発覚?
Writing Technical Documentation with Sphinx, Paver, and Cog
■[Mac]巡回

LatLongLabのiPhoneアプリ「シャカ地図」を試す
The iPhone Springboard in xHTML, CSS and jQuery
Mac OSXで"200"ものアプリを起動させExpose'
[iPhoneアプリ評価]巡回サイトのランチャーとして活用 - WebApps1.1
[iPhone雑記]GoogleAnalyticsをEvernote経由で見る
[iPhoneアプリ評価]USアカでLast.fm(無料)をゲット♪ - 音楽SNS
[iPhone雑記]iTunesのUSアカウントを作ってUS無料アプリを!
Gmailでタスク管理ができる「Gmail Tasks」が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/touch用のアプリ不正使用ツールCrackulousでJB界に衝撃
オプトマポケットプロジェクターPK101用iPod/iPhone用AVケーブル
iPhone上のファイルを、ついにBluetoothでワイヤレス転送可能に(動画)
今週の注目オンラインソフト for Mac OS X 46 シンプルでてきぱき書けるマインドマッピングツール「MindNode」
■[FreeBSD][その他]巡回

CD-ROM/DVD-ROMメディアからISOイメージファイルを作成するツールを公開
Doculicious: On-line Form Designer with PDF Output
道路から見た写真をネットで閲覧できる「Google マップ ストリートビュー」、今後は画像公開前に事前通知されることに
「OpenOffice.org 3.0」で一太郎ファイルを開ける機能拡張
ファンデリー、店長の個性で選べる飲食店検索サイト「グル名刺」を正式公開
VMware Infrastructure 3のストレージ機構[1]
海底地図や過去画像も! 「Google Earth 5.0」が公開
フィルタリング機能つきの子どもむけ検索サイト「KidRex」
GmailをはじめWebメールを使っている人が幸せになる「Affixa」