FOSS4G Hokkaidoハンズオン(裏メニュー) 続き
前回からの続きです。spatialiteで、残っていた課題2を行います。
にぎわっているエリアでカレー屋さんを開くのに良いエリアを探します。
shapeデータのimport
ハンズオン用のデータ(QGIS_level2_vector\work02\shp)から
- 01_GPS_L
- 03_mesh100
- 05_curry_p
をspatialiteへimportします。
注意点は今回と同じく、
としてください。
にぎわっているエリアの抽出
QGISで行った場合、
- GPSで取ったライン→ノード展開
- 100mメッシュに入るノード数をカウント
しています。
ここでは、
- 100mメッシュ毎に、GPSで取ったラインの重なる長さ
を計算しましょうか。
重なる長さ"0"の100mメッシュは使わないので捨てちゃいます。少しでも重なりがあるメッシュはにぎわっていると判断しましょう。
実行結果は"mesh_l"テーブルに保存しておきます。
create table mesh_l as select m.*, cast(sum(length(intersection(g.Geometry, m.Geometry))) as REAL) as l from GPS_L g, mesh100 m group by m.ID having l is not null
"GPS_L"テーブルと"mesh_l"テーブルをQGISで表示してみると下図になります。
"mesh_l"は重なる長さにより色分けしてあります。濃いほうが重なる長さが長い。
にぎわっているエリアは抽出出来ていそうです。
カレー屋さんから200mのバッファ作成
バッファ作成は前回もやっているので同じような感じです。個々に保持する必要もないので、1つの図形にしてしまいます。
実行結果は"curry_b"テーブルに保存しておきます。
create table curry_b as select st_union(buffer(geometry, 200)) as geometry from curry_p
さらにQGISで重ねて表示すると下図になります。
カレー屋を開くのにどのエリアがよいか探します
にぎわっているエリアのうち、カレー屋から200mのエリアに重ならないものを抽出します。
実行結果は"mesh_res"テーブルに保存しておきます。
create table mesh_res as select m.* from mesh_l m, curry_b b where intersects(m.geometry, b.geometry) != 1