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データベースの選択→"接続"→読み込みたいテーブルを選択→"追加"の手順になります。