QGISで人口が半分になるように2分割してみた
人口が半分になるように都道府県を二分割してみた
togetter.com
というのがtwitterでまわっていましたね。
これをQGISでやるプラグインを作って、FOSS4G Advent Calendar
FOSS4G Advent Calendar 2016 - Qiita
のネタにしようと思っていました。ただ朝の時点で出来ていなかったので、他の投稿をしておきました。
UIを作るところで思いの外ハマったのでですが、なんとなくできたので晒しておきます。
QGISプラグイン
GitHubにおいておきました。
github.com
プラグインの動作
インストールして実行してもらうと、ベクトルレイヤ(ポリゴンのみ)を選択→レイヤ内の使用するカラムの選択を行えます。
合わせてスライダーで割合を指定します。
この画像の例だと、
- h22ka01204レイヤを
- JINKO カラムを使って
- 人口上位の地域から加えていって30%になる地域:それ以外の地域で色分け(30%超えたところで止めてるのでだいたいね)
になります。
e-stat から平成22年の小地域をダウンロードしてきて試してみました。
- 旭川市を、人口上位の地域から数えていって30%になるところまでを青:それ以外を赤で色分け
- 札幌市を、人口上位の地域から数えていって50%になるところまでを青:それ以外を赤で色分け
処理の仕方
大事なところだけ。
- comboboxとsliderから値を持ってきて
- 指定のlayerの指定のカラムの値を全部足す
- sliderの値の割合をかけて、目標の数字とする
- 指定カラムの値をソート
- ソートしたものを足していって、目標の数字を超えたところでストップ
- この条件でQgsRuleBasedRendererV2を作成
- layerにセットして再描画
としています。
QtDesinger with QGIS 2.14 custom widgets
どこでハマってたかというと。気づいてなかったのですがQGISをインストールすると、QtDesingerがついてくるんですね。
このQtDesingerにはQGISのcustom widgetsがついています。
例えばQgsFieldComboBoxだと、レイヤを渡すと勝手にFieldでComboBoxを作ってくれます。
ただ作ったUIを実行しようとすると、エラーが出てしまいました。このあたりを参考に修正しています。
osgeo-org.1560.x6.nabble.com