沿道に10万人入るのか考えてみた
最初に告知
今年もFOSS4G Advent Calendarやります。ぜひご登録を。
FOSS4G Advent Calendar 2012
今日は札幌では、日ハムの優勝パレードでした
家族が風邪をひいていて、病院に連れて行っている間に終わってました。
出歩けないし暇だと思ってTwitterを眺めていたら、こんなつぶやきが。
沿道に10万人ってどうやって数えてるんだろう
spatialite 4の新機能
まだリリースされていないんですが、spatialite 4で追加される機能はいつか試そうと思っていました。
特にこれtesselations-4.0です。
本来は調査用にメッシュを切ったりするのでしょうが、ただ単に六角形で範囲を充填してみたい、とか思っていただけです。
パレード沿道を六角形で埋めてみよう
というわけで、10万人並べれるものかなと思いつつ、パレード沿道を六角形で埋めてみました。
使用したデータ&アプリは下記になります。
- 基盤地図縮尺レベル2500(札幌市中央区の、道路縁と建物の外周線)
- QGIS 1.9.0
- spatialite 4.0.0-RC1(Pre-built Windows 32 bit)
データ準備
基盤地図情報ダウンロード、JPGIS→shapefileは割愛いたしますm(_ _)m。
いきなりQGISに読み込んだ画面ですが、このような形になります。
背景にするデータは準備出来たとして、次にパレード沿道の範囲を決めます。パレードのコースを調べましょう。こちらで公開されています。
まずはQGIS上で大まかにこの辺まで沿道でいいだろう、という範囲をポリゴンで作成してしまいます。
駅前からススキノまでのポリゴンを作成しました。レイヤー名:routeExtとしておきましょう。
次に明らかに観客が入れない区域を定義します。
もう少し細かく定義すべきですが、ここではパレードの通りそうな道路だけにしました。
この範囲もポリゴンを作成しておきます。
駅前からススキノまでの道路のポリゴンを作成しました。レイヤー名:routeとしておきましょう。
ここからは空間演算。routeExt -(引く) routeの範囲を求めます。
"ベクタ"→"空間演算ツール"→"差分"を選択します。
"ベクタレイヤーの入力"をrouteExt、"レイヤの差分"をrouteにします。出力shapefileはrouteExt2としました。
さらに建物部分を抜きます。同じく、"ベクタ"→"空間演算ツール"→"差分"を選択して、"ベクタレイヤーの入力"をrouteExt2、"レイヤの差分"を建築物にします。
差分の結果は下記になります。
建物の裏の路地まで残っていたり、地上と高架の関係がおかしかったりしますが、ご愛嬌ということで。なんなく人が立てそうな範囲が残ったとしておきましょう。
結果を一旦shapefileに保存してください。
ここからの処理はspatialiteで行います。
spatialiteでST_HexagonalGrid
spatiliate-guiの取り扱いについては、FOSS4G Hokkaidoハンズオン(裏メニュー)を御覧ください。詳細は割愛致します。
読み込んだデータ(テーブル名:routeAreaとしています)に対して、下記のSQLを実行します。
create table hexOnArea as SELECT ST_HexagonalGrid(geometry, 0.3) as geometry FROM routeArea
- 範囲を充填する(覆う)ように、六角形を作成します
- 作成される各六角形の1辺の長さを30cmとしています、特に根拠はなし
- 実行結果はhexOnAreaテーブルに入れられます
QGISからspatialiteにアクセスしたいところですが、QGISが開発版のspatiliateには対応していません。
実行結果はshapefileに保存して、改めてQGISで表示します。