waigani's diary

QGISを中心にFOSS4Gをいじくる

FOSS4G Hokkaidoハンズオン(裏メニュー)

FOSS4G 2012 Hokkaido御礼

FOSS4G 2012 Hokkaido、多数の皆様にご参加いただきました、有難うございます。
また、事例発表を引き受けてくださった皆様、お手伝いいただいた皆様、厚く御礼致します。

まとめ記事を書きたいと思いつつ、さぼっております。

私、1日目は変なことしゃべって、2日目は裏方だったので、仕事してたのかしてないのかわからない状態です。
特にハンズオン講師の皆様の準備には感服いたしました。
敬意を表して裏ハンズオン。
見にくいかもしれません、あしからず。

QGISハンズオン中級(ベクタ編)

資料とデータを公開してくれています。この空間解析を真似してみます。

データは http://bit.ly/F4GHKD_Q_V になります。

spatialiteハンズオン!

PostgreSQL/PostGISでやろうかとも思ったのですが、お手軽なのでspatialiteにします。

spatialiteのインストール

spatialite-guiを使います。
windowsのバイナリはこちらのページの"MS Windows binaries"というところからダウンロード出来ます。
spatialite_gui-1.5.0-stable-win-x86.zip (2012.7.6現在)をダウンロード後、解凍すると

exeファイルが入ってますので、実行しましょう。
デフォルトの画面はこんな感じです。

データベースの作成

"Creating A New (empty) SQLite DB"を選択して、新規にデータベースを作成してください。

データベースが作成されると、次のような表示になります。空間情報を扱うためのtableやviewが作成された状態です。

shapeデータのimport

ハンズオン用のデータ(QGIS_level2_vector\work01\shp)から

  • 01_station
  • 02_pub
  • 07_mesh

をデータベースへimportします。


"Load Shapefile"をクリック後、上記のshapefileを1ファイルづつ選択してください。
注意点として、

  • Charset Encodingで"SHIFT_JIS"
  • SRIDに"32654"
  • table name の先頭の数字は避ける。それぞれstation, pub, meshとします

としてください。細かい解説は抜かします。

import出来たかの確認は、各テーブル名でマウスを右クリック→"Edit Tabel Row"としてみてください。
取り込み済みの内容が表示されます。

csvデータのimport

ハンズオン用のデータ(QGIS_level2_vector\work01\shp)から

  • 04_pubdata.csv

をデータベースへimportします。

1行目をテーブルのカラム名として使用しますので、日本語は避けておきます。
メモ帳等でファイルを開いて、1行目を書き換えておきます。


"Load CSV/TEXT"をクリック後、上記のファイルを選択してください。
注意点として、

  • Charset Encodingで"SHIFT_JIS"
  • table name の先頭の数字は避ける。pubdataとします
  • Column separaterは"Comma,"

とします。

札幌駅から500mの範囲

下記のSQL文を上段に入れて、右の方にある"Execute SQL Statement"をクリックしましょう。

select buffer(geometry, 500) as geometry from station where "name" = "札幌"

下段に実行結果が表示されます。

札幌駅から500mのbufferが作られたはずなのですが、このままだと図形がバイナリで入っているのでなんだかわかりません。

select astext(buffer(geometry, 500)) as geometry from station where "name" = "札幌"

で再度実行してみてください。polygonが作成されていることがわかります。

飲み放題の居酒屋

解説省略。下記のSQL文を実行してみましょう。5件選択されるはずです。

select p.*
from 
  (select buffer(geometry, 500) as geometry from station where "name" = "札幌") b,
  (select pd.*,pu.geometry from pub pu, pubdata pd where pu.id = pd.id) p
where within(p.geometry, b.geometry)
and p.sort = "居酒屋"
and p.drink = 1;
周辺に若年層の多い店

解説省略。下記のSQL文を実行してみましょう。
結果にお店ポイントに対応した統計メッシュから持ってきた若年層数属性が追加されます。

select p.*, m.young
from 
  (select buffer(geometry, 500) as geometry from station where "name" = "札幌") b,
  (select pd.*,pu.geometry from pub pu, pubdata pd where pu.id = pd.id) p, mesh m
where within(p.geometry, b.geometry)
and   within(p.geometry, m.geometry)
and p.sort = "居酒屋"
and p.drink = 1;
QGISで表示

このままでは結果は得られても図示出来ませんので、結果をテーブルに保存します。
create table→addgeometrycolumn→結果のinsertでもいいのですが、ちょっとズルします。
下記SQLを実行して結果を新しいテーブルに入れます。

create table handson_result as
select p.*, m.young
from 
  (select buffer(geometry, 500) as geometry from station where "name" = "札幌") b,
  (select pd.*,pu.geometry from pub pu, pubdata pd where pu.id = pd.id) p, mesh m
where within(p.geometry, b.geometry)
and   within(p.geometry, m.geometry)
and p.sort = "居酒屋"
and p.drink = 1;

実行後、左側のウインドウでデータベース名を右クリック→refreshとすると、作成したテーブルが表示されます。

表示された"handson_result"テーブルを見ると、"mesh"等と違い地球?のようなマークがないのがわかると思います。
これはgeometryを持ったテーブルだよと、メタデータに登録されていないためです。
handson_resultテーブルのカラムを展開した状態で、"geometry"を右クリック→"Recover Geometry Column"を選択してください。

  • Geometry Typeでpoint
  • SRIDで32654
  • DIMでXY

を選択します。

設定後refreshして、地球みたいなマークがついたことを確認してください。

これでOKですので、メニューから"Files"→"Quit"を選択してデータベースを閉じてください。

作成したspatialiteのデータベースは、QGISの"レイヤ"→"SpatiaLiteレイヤの追加"からQGISに読み込むことが出来ます。
試してみてください。
新規のspatialiteデータベースを開く際は、"新規"→spatialiteデータベースの選択→"接続"→読み込みたいテーブルを選択→"追加"の手順になります。

終了

課題の1つ目までですが、とりあえず終了します。
時間があったらもう1つもやってみますし、他のハンズオンも違う方法で真似してみようかな。
QGIS中級(ラスタ編)をPostGISでどこまでできるのとか、mapserver入門をQGIS Serverでやってみるとか。

軽く書いてみて改めてハンズオンの準備大変だなと実感しました。
講師の皆様お疲れ様でした!!